《oracle pl/sql programming》 第一章 介绍 第二章 sql*plus

原创 2007年09月29日 23:42:00

第一章 介绍

1. what's pl/sql
It is a highly structured, readable, and accessible language
高度結構化易讀的易理解的
 
It is a standard and portable language for Oracle development
標準的輕便的
 
It is an embedded language
嵌入式的運行是需要宿主環境
 
It is a high-performance, highly integrated database language
高性能與數據庫高度集成
 
2.歷史與版本
 
3.代碼樣例
3.1 基本結構
 1   DECLARE
 2      l_book_count INTEGER;
 3
 4   BEGIN
 5     SELECT COUNT(*)
 6        INTO l_book_count
 7        FROM books
 8       WHERE author LIKE '%FEUERSTEIN, STEVEN%';
 9   
10       DBMS_OUTPUT.PUT_LINE (
11          'Steven has written (or co-written) ' ||
12           l_book_count ||
13           ' books.');
14
15       -- Oh, and I changed my name, so...
16       UPDATE books
17          SET author = REPLACE (author, 'STEVEN', 'STEPHEN')
18        WHERE author LIKE '%FEUERSTEIN, STEVEN%';
19    END;
 
 
3.2 procedure樣例
 1   CREATE OR REPLACE PROCEDURE pay_out_balance (
 2      account_id_in IN accounts.id%TYPE)
 3   IS
 4      l_balance_remaining NUMBER;
 5   BEGIN
 6      LOOP
 7         l_balance_remaining := account_balance (account_id_in);
 8
 9         IF l_balance_remaining < 1000
10         THEN
11            EXIT;
12         ELSE
13             apply_balance (account_id_in, l_balance_remaining);
14         END IF;
15      END LOOP;
16    END pay_out_balance;
 
3.3 帶異常處理的procedure結構
 1   CREATE OR REPLACE PROCEDURE check_account (
 2      account_id_in IN accounts.id%TYPE)
 3   IS
 4      l_balance_remaining       NUMBER;
 5      l_balance_below_minimum   EXCEPTION;
 6      l_account_name            accounts.name%TYPE;
 7   BEGIN
 8      SELECT name
 9        INTO l_account_name
10        FROM accounts
11       WHERE id = account_id_in;
12
13      l_balance_remaining := account_balance (account_id_in);
14
15      DBMS_OUTPUT.put_line (
16         'Balance for ' || l_account_name ||
17          ' = ' || l_balance_remaining);
18
19      IF l_balance_remaining < 1000
20      THEN
21         RAISE l_balance_below_minimum;
22      END IF;
23
24   EXCEPTION
25      WHEN NO_DATA_FOUND
26      THEN
27         -- No account found for this ID
28         log_error (...);
29
30      WHEN l_balance_below_minimum
31      THEN
32         log_error (...);
33         RAISE;
34   END;
 
4.學習資源
 
5.一些建議
5.1 欲速則不達
在撰寫代碼之前構建測試用例與編寫測試腳本
建立清晰的應用程序編碼規則及需要程序員共同遵守的約定
使用逐步求精的步驟和方法來簡化復雜性
 
5.2 不恥下問
承認自己的無知
需求幫助
將問題和答案整理歸類
 
5.3 發揮你的激情和創造力不要輕易退縮
 
 

 第二章 pl*sql

1. 啟動sql*plus并連接數據庫
os> sqlplus username/password
 
os> sqlplus /nolog
sql> connect username/password@databaseinfo
 
2 運行代碼
sql> BEGIN
 2     DBMS_OUTPUT.PUT_LINE('Hey look, ma!');
 3 END;
 4 /    --斜杠/表示運行
此時無顯示。
sql>set serveroutput on
sql> BEGIN
 2     DBMS_OUTPUT.PUT_LINE('Hey look, ma!');
 3 END;
 4 /    --斜杠/表示運行
顯示結果:Hey look, ma!
以上begin ...endEXECUTE是等價的
sql>EXECUTE DBMS_OUTPUT.PUT_LINE('Hey look,ma!');
 
sql>@scriptfilename;
or
sql>start scriptfilename;
 
3 什么是當前路徑
當前路徑指的是進入sql*plus前所在的操作系統路徑
c:/> sqlplus username/password
sql>_
此時的當前路徑為 c:/
 
4. define variable
相當于c語言里的宏與變量
SQL> DEFINE x = "the answer is 42"
SQL> VARIABLE x VARCHAR2(10)
    SQL> BEGIN
      2     :x := 'hullo';
      3 END;
      4 /
SQL> SELECT :x, '&x' FROM DUAL;
返回結果如下
    :X                               'THEANSWERIS42'
    -------------------------------- ----------------
    hullo                            the answer is 42
 
5.將輸出結果保存到文件
SQL> SPOOL report
SQL> @run_report
......
SQL> SPOOL OFF 
SQL> SPOOL report.txt
 
6.退出sql*plus
sql>disconnect;
sql>exit;
 
7.編輯腳本
sql> edit mySQLScript.pkg --調用默認的編輯器進行編輯
sql> DEFINE _EDITOR = c:/windows/notepad.exe --設置默認的編輯器
 
8.在啟動時加載自定義環境
sql*plus在啟動時若發現存在$ORACLE_HOME/qlplus/admin/glogin.sql 就會自動運行它。
然后如果在當前目錄下發現login.sql,則自動運行它。
因此可以在這兩個文件中加入自定義sql*plus環境的代碼
    REM Number of lines of SELECT statement output before reprinting headers
    SET PAGESIZE 999
 
    REM Width of displayed page, expressed in characters
    SET LINESIZE 132
 
    REM Enable display of DBMS_OUTPUT messages. Use 1000000 rather than
    REM "UNLIMITED" for databases earlier than Oracle Database 10g Release 2
    SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED
 
    REM Change default to "vi improved" editor
    DEFINE _EDITOR = /usr/local/bin/vim
 
    REM Format misc columns commonly retrieved from data dictionary
    COLUMN segment_name FORMAT A30 WORD_WRAP
    COLUMN object_name FORMAT A30 WORD_WRAP
 
    REM set the prompt (works in SQL*Plus from Oracle9i Database or later)
    SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > "
:REM表示注釋。
 
9. sql*plus的錯誤處理
sql*plus執行代碼時時遇到錯誤時的默認處理方式是返回錯誤消息并繼續處理后續代碼。
如果希望sql*plus遇到錯誤是終止執行則執行如下代碼
SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
如果還希望回滾事務則執行如下代碼
SQL> WHENEVER SQLERROR SQL.SQLCODE EXIT ROLLBACK
 
10. sql*plus的愛與恨
love:
With SQL*Plus , you can run "batch" programs, supplying application-specific arguments on the sqlplus command line, and referring to them in the script using &1 (first argument), &2 (second argument), etc.
 
SQL*Plus provides complete and up-to-date support for all SQL and PL/SQL statements. This can be important when you're using features unique to Oracle. Third-party environments may not provide 100% coverage; for example, some have been slow to add support for Oracle's object types, which were introduced a number of years ago.
 
SQL*Plus runs on all of the same hardware and operating system platforms on which the Oracle server runs.
 
hate:
In console versions of SQL*Plus, the statement buffer is limited to the most recently used statement; SQL*Plus offers no further command history.
 
With SQL*Plus, there are no modern command-interpreter features such as automatic completion of keywords or hints about which database objects are available while typing in a statement.
 
Online help consists of minimal documentation of the SQL*Plus command set. (Use HELP command to get help on a specific command.)
 
There is no ability to change the current directory once you've started SQL*Plus. This can be annoying when opening or saving scripts if you don't like typing full pathnames. If you discover that you're in an inconvenient directory, you have to quit SQL*Plus, change directories, and restart SQL*Plus.
 
Unless I break down and use what I consider the dangerous SQLPATH feature, SQL*Plus looks only in the startup directory for login.sql; it would be better if it would fall back to look in my home directory for the startup script.
 
 

SQL语句、PL/SQL块和SQL*Plus命令之间的区别

在SQL*Plus中可以处理三种类型的命令:SQL语句、PL/SQL块和SQL*Plus命令。 但三者之间是有区别的。 1)SQL语句是以数据库为操作对象的语言,主要包括数据定义语言DDL、数据操纵语...
  • liuzhushiqiang
  • liuzhushiqiang
  • 2013年10月05日 21:43
  • 1507

Oracle数据中的PL/SQL介绍

什么是Pl/SQL: PL/SQL是Procedure Language & Sturtured Query Language的缩写。PL/SQL的优点: 有利于客户/服务器环境应用的性能提高。...
  • qq455276333
  • qq455276333
  • 2013年10月01日 11:58
  • 1619

PL/SQL简介与简单实用

一、PL/SQL简介: (1)PL/SQL俗称过程化SQL语言(Procedural Language/SQL),是Oracle对SQL的 过程化扩充 而形成的程序开发语言。在普通SQL语句的使用...
  • super_YC
  • super_YC
  • 2017年04月03日 04:59
  • 324

Oracle PL/SQL常用47个工具包

Oracle PL/SQL Utility Library PL/SQL 各种常用工具包代码,包含: PDF文件生成工具包 Excel文件生成、 RTF文件生成、 Zip文件压缩与解压、 ...
  • nansheng_su
  • nansheng_su
  • 2015年05月11日 20:53
  • 1162

PL/SQL客户端连接ORACLE服务端配置详细过程

PL/SQL客户端连接ORACLE服务端配置详细过程
  • AaronSiHai
  • AaronSiHai
  • 2017年03月14日 09:46
  • 1746

oracle客户端PL/SQL安装简易教程

前言:oracle客户端有很多,市面上最常用的是PL/SQL,另外还有navicat for oracle,toad for oracle,以上两个都收费,还有一个为oracle官方推出的免费orac...
  • fengbird
  • fengbird
  • 2017年01月06日 23:25
  • 1998

Oracle 11g 安装教程及pl/sql下载安装

一般来说,下载后都会有两个压缩包,将这两个压缩包解压到同一个文件夹下,本例中解压目录为“database” 进入目录后看到setup.EXE,双击运行 稍等片刻后会出现如下安装界面:可根据当前...
  • u010750497
  • u010750497
  • 2017年01月03日 17:36
  • 3201

2、Oracle PL/SQL字符串分割截取

该文章是 PL/SQL基础(3):小专题 系列文章之一。 Oracle中的instr和substr函数 Oracle PL/SQL中可以通过instr(获取特定字符串的索引)和substr(截...
  • dou3516
  • dou3516
  • 2016年09月07日 12:19
  • 3678

ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素

ORACLE PL/SQL编程详解之二:  PL/SQL块结构和组成元素(为山九仞,岂一日之功) 本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符...
  • u012456926
  • u012456926
  • 2015年01月06日 11:18
  • 1019

pl/sql developer 无法连接本地Oracle(注意是本地oracle)

本来挺简单的事情,会由于客观环境的原因让问题变得很复杂和无法理解 如果本地的oracle无法用pl/sql developer  连接上,大多是因为本地oracle混乱,各种客户端,各种服务...
  • rainyspring4540
  • rainyspring4540
  • 2017年02月10日 16:19
  • 686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《oracle pl/sql programming》 第一章 介绍 第二章 sql*plus
举报原因:
原因补充:

(最多只允许输入30个字)