日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PL/SQL 处理流程

發布時間:2024/9/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PL/SQL 处理流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  P249 -P254? oracle8i_9i數據庫基礎——查看本號百度文庫
  ***********PL/SQL 簡介***************
  1、PL/SQL 是過程語言(Procedural Language)與結構化查詢語言(SQL)結合而成的編程語言
  2、PL/SQL 是對SQL的擴展
  3、支持多種數據類型,如大對象和集合類型,可使用條件和循環等控制結構
  4、可用于創建存儲過程、觸發器和程序包,給SQL語句的執行添加程序邏輯
  5、與 Oracle 服務器和 Oracle 工具緊密集成,具備可移植性、靈活性和安全性
  §11.2.2? *********************PL/SQL 可用的SQL語句*******************
  PL/SQL是Oracle系統的核心語言,現在Oracle的許多部件都是由PL/SQL寫成。在PL/SQL中可以使用的SQL語句有:
  在PL/SQL中可以用的SQL語句有:
  INSERT
  UPDATE
  DELETE
  SELECT INTO
  COMMIT
  ROLLBACK
  SAVEPOINT
  提示:在 PL/SQL中只能用 SQL語句中的 DML 部分,不能用 DDL 部分,
  如果要在PL/SQL中使用DDL(如Create? table? 等)的話,只能以動態的方式來使用。
  Oracle 的 PL/SQL 組件在對 PL/SQL 程序進行解釋時,同時對在其所使用的表名、列名及數據類型進行檢查。
  PL/SQL 可以在SQL*PLUS 中使用。PL/SQL 可以在高級語言中使用。
  PL/SQL可以 在Oracle的 開發工具中使用。
  其它開發工具也可以調用PL/SQL編寫的過程和函數,如Power Builder 等都可以調用服務器端的PL/SQL過程。
  /**************************PL/SQL塊的結構如下:*************************/
  Declare
  /*?? 聲明部分: 在此? 聲明PL/SQL用到的變量,類型及光標 */
  begin
  /*? 執行部分:? 過程及SQL 語句? , 即程序的主要部分? */
  Exception
  /* 執行異常部分: 錯誤處理? */
  End;
  ************************************第十三章PL/SQL 處理流程**************************
  在PL/SQL程序中,要使程序能按照邏輯進行處理,除了有些語句是SQL語句外,還必須有能進行邏輯控制的語句。下面就介紹進行處理流程的語句結構。
  §13.1? /*********條件語句**********條件語句*********************條件語句******/
  IF <布爾表達式> THEN
  PL/SQL 和 SQL語句
  END IF;
  IF <布爾表達式> THEN
  PL/SQL 和 SQL語句
  ELSE
  其它語句
  END IF;
  IF <布爾表達式> THEN
  PL/SQL 和 SQL語句
  ELSIF < 其它布爾表達式> THEN
  其它語句
  END IF;
  提示: ELSIF 不能寫成 ELSEIF
  例:
  declare
  v_salary annualsalary.nannualsalary%TYPE;--annualsalary.nannualsalary%TYPE 為 "表名.字段名%type"
  v_output varchar(100);
  begin
  select nannualsalary into v_salary??? --為v_salary 賦值
  from annualsalary where nyear=1997;
  if v_salary <40000 then
  v_output:='1員工工資小于40000';
  elsif v_salary>50000 then
  v_output:='1員工工資大于50000';
  else
  v_output:='1員工工資在40000到50000之間';
  end if;
  dbms_output.put_line(v_output);
  end;
  §13.2? 循環
  1.? 簡單循環? ****************loop end loop*************loop? end loop*******************loop?? end loop****************
  Loop
  要執行的語句;
  end loop;
  --此循環將執行到遇到一條 exit 語句為止.
  例1.
  declare
  x? number;
  begin
  x:= 0;
  loop
  x:=x+1;
  dbms_output.put_line(to_char(x));
  exit? when x=10;
  end loop;
  end;
  例 2.
  --節選自在線代碼 simple.sql
  DECLARE
  V_counter? BINARY_INTEGER? := 1;
  Begin
  LOOP
  Inert into temp_table
  Values( v_counter, ‘loop index’ );
  V_counter? := v_counter? + 1;
  If v_counter > 50? then
  Exit;
  End if ;
  End loop;
  End;
  例 3.
  --節選自在線代碼 exitwhen.sql
  DECLARE
  V_counter? binary_index := 1;
  Begin
  Loop
  Insert? into temp_table
  Values ( v_counter,’ loop index ‘ );
  Exit? when? v_counter > 50? ;
  End loop;
  End;
  2.? WHILE 循環 /********While <> Loop? End Loop*******************While <> Loop? End Loop*******************
  While 循環
  While? <布爾表達式>? loop
  要執行的語句;
  end loop;
  例1.
  declare
  x? number;
  begin
  x:= 1;
  while? x<10? loop
  dbms_output.put_line(to_char(x)||’還小于10’);
  x:= x+1;
  end loop;
  end;
  例 2.
  --節選自在線代碼 while1.sql
  DECLARE
  V_counter? binary_integer? := 1;
  Begin
  While v_counter <= 50? loop
  Inert? into temp_table
  Values( v_counter, ‘loop index ‘) ;
  V_counter? := v_counter + 1;
  End loop;
  End;
  3.? 數字式循環
  For 循環/****************************************For? 循環計數器? in? 下限 ..? 上限
  For? 循環計數器? in? 下限 ..? 上限
  loop
  要執行的語句;
  end loop;
  FOR loop_counter? IN [ REVERSE ] low_bound? . . high_bound? LOOP
  Sequence_of_statements;
  END LOOP;
  例1.
  begin
  for? I?? in?? 1??? ..?? 10??? loop
  dbms_output.put_line(‘in=’||to_char(I));
  end loop;
  end;
  例 2.
  --節選自在線代碼 forscope.sql
  DECLARE
  V_counter? number := 7;
  Begin
  Inert? into temp_table? (num_col)
  Values ( v_counter );
  For? v_counter? IN 20 .. 30 loop
  Insert? into temp_table (num_col )
  Values ( v_counter );
  End? loop;
  Inert? into temp_table (num_col )
  Values( v_counter );
  End ;
  注:*******************************************如果在for 中用 INVERSE 關鍵字,則循環索引將從最大向最小進行迭代.
  §13.3? ***************標號和GOTO************標號和GOTO****************標號和GOTO
  PL/SQL中GOTO語句是無條件跳轉到指定的標號去的意思。語法如下:
  GOTO?? label;
  . . .? . . .
  <<label>>
  例:
  --節選自在線代碼 goto.sql
  DECLARE
  V_counter? BINARY_INTEGER := 1;
  Begin
  Loop
  Inert? into temp_table
  Values( v_counter,’loop count’ );
  V_counter? := v_counter + 1;
  If? v_counter > 50 then
  Goto l_endofloop;
  End? if;
  End loop;
  <<l_endofloop>>
  insert? into? temp_table ( char_col )
  values(‘Done !’);
  End ;
  §13.4? ***********NULL 語句 *******************NULL 語句 *****************NULL 語句
  在 PL/SQL 程序中,null語可以用 null 語句來說明“不用做什么”的意思。如:
  declare
  . . .
  begin
  …
  if( v_num is null then
  goto print1;
  end if;
  …
  <<print1>>
  NULL;? -- 不需要處理任何數據。
  End;

總結

以上是生活随笔為你收集整理的PL/SQL 处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。