跳转到内容

PL-SQL

维基百科,自由的百科全书

这是本页的一个历史版本,由Makecat-bot留言 | 贡献2012年11月8日 (四) 12:37 (r2.7.3) (机器人添加:kk:PL/SQL编辑。这可能和当前版本存在着巨大的差异。

PL/SQL(Procedural Language/SQL)是甲骨文公司專有的SQL擴展語言,應用在甲骨文公司Oracle数据库系統。一些的SQL数据库管理系統也提供了類似的擴展SQL語言。 PL/SQL的的語法非常類似於Ada,而且像1980年代的Ada編譯器一樣,PL/SQL的運作系統使用Diana作為中介語言

重要的是PL/SQL緊密的結合在Oracle数据库裡面。

PL/SQL是Oracle數據庫使用的三種語言的其中之一,另外兩個是SQLJava

歷史

功能

基本程式

条件语句

以下的代码展示了IF-THEN-ELSIF结构。ELSIF和ELSE部分是可选的,从而可以创建更简单的IF-THEN或者IF-THEN-ELSE结构。

IF x = 1 THEN
   sequence_of_statements_1;
ELSIF x = 2 THEN
   sequence_of_statements_2;
ELSIF x = 3 THEN
   sequence_of_statements_3;
ELSIF x = 4 THEN
   sequence_of_statements_4;
ELSIF x = 5 THEN
   sequence_of_statements_5;
ELSE
   sequence_of_statements_N;
END IF;

CASE语句简化了一些大的IF-THEN-ELSE结构。

CASE
   WHEN x = 1 THEN sequence_of_statements_1;
   WHEN x = 2 THEN sequence_of_statements_2;
   WHEN x = 3 THEN sequence_of_statements_3;
   WHEN x = 4 THEN sequence_of_statements_4;
   WHEN x = 5 THEN sequence_of_statements_5;
   ELSE sequence_of_statements_N;
END CASE;

CASE语句可以使用预定义的选择符:

CASE x
   WHEN 1 THEN sequence_of_statements_1;
   WHEN 2 THEN sequence_of_statements_2;
   WHEN 3 THEN sequence_of_statements_3;
   WHEN 4 THEN sequence_of_statements_4;
   WHEN 5 THEN sequence_of_statements_5;
   ELSE sequence_of_statements_N;
END CASE;

陣列

迴圈

比较常用的有三种形式。 (1) For ... Loop

   ...
   End Loop;

(2)

Loop
   ...
   End Loop;

(3) while...loop;

loop循环是最简单的循环语句。 loop end loop; 该语法用于无限制的循环执行语句,在实际中没有任何意思。如果退出循环,则必须使用exit语句终止循环。 exit语句分两种格式: exit:该格式的语句用于无条件强迫终止循环。 exit...when:该格式用于有条件终止循环,首先检测when的条件是否满足。 loop if...then exit; end if; end loop; loop exit when ; end loop; while...loop循环在执行语句时,首先检测条件的值。例如: declare

  div_name varchar2(20);
  div_num integer:=1;

begin

  while div_num<10 loop
    select name into div_name from div_tab where div_author ='A000'||to_char(div_num);

div_num:=div_num+1; end loop; end; for...loop循环可以限定循环的次数 例如: declare

  div_name varchar2(20);
  div_num integer:=1;

begin

  for div_num in 1..9 loop
  select name into div_name from div_tab where div_author='A000'||to_char(div_num);

end loop; end;

declare div_name varchar2(20); div_num integer:=1; begin for div_num in 1..9 loop EXIT WHEN div_num >7; DBMS_OUTPUT.put_line(div_num); end loop; end;

類似的語言

功能近似PL/SQL的程序語言和其他關係型資料庫:

Sybase ASEMicrosoft SQL ServerTransact-SQLPostgreSQL資料庫的PL/pgSQL(模仿PL/SQL)和IBM DB2SQL PL[1],都符合ISO SQLSQL/PSM標準。

參考

外部連結