<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    本站不再更新,歡迎光臨 java開發技術網
    隨筆-230  評論-230  文章-8  trackbacks-0

    Oracle 支持兩種類型 SQL: 靜態 SQL 和動態 SQL 。在靜態 SQL 中, SQL 語句在編譯時就已經全部確定,語法和語義的引用問題也是在編譯時全部解析確定。在動態 SQL 中, SQL 語句是由字符串組成的,在運行時動態執行。動態 PL/SQL 也是如此。

    ?

    DBMS_SQL 與本地動態 SQL 比較

    1、? 動態 SQL 語句最長度限制在 32K 以內。比這個長的語句就只能用 DBMS_SQL 來處理 .

    2、? 還有很多。。省略

    一個最簡單的例子 :

    SQL>? declare

    ? 2????? dyn_tab_name varchar2(20):='t_temp';

    ? 3????? dyn_string varchar2(150);

    ? 4?? begin

    ? 5???? dyn_string:='create table '||dyn_tab_name||' (colA number not null)';

    ? 6???? execute immediate dyn_string;

    ? 7? end;

    ? 8? /

    使用 DBMS_SQL 的過程包括以下五個步驟

    1、??? 以字符串的形式構造動態 SQL 語句

    2、??? 專用明游標句柄并為該句柄打開游標

    3、??? 解板動態構造的 SQL 語句,把該 SQL 語句與游標句柄關聯。

    4、??? 執行 SQL 語句

    5、??? 關閉游標

    SQL> declare

    ? 2????????? dyn_tab_name varchar2(20):='t_temp';

    ? 3????????? dyn_string varchar2(150);

    ? 4????????? c ? integer;

    ? 5????????? ret_code integer;

    ? 6????? begin

    ? 7??????? dyn_string:='create table '||dyn_tab_name||'( colA number not null)';

    ? 8??????? c:=dbms_sql.open_cursor;

    ? 9?????? dbms_sql.parse(c,dyn_string,dbms_sql.v7);

    ?10?????? ret_code:=dbms_sql.execute(c);

    ?11?????? dbms_sql.close_cursor(c);

    ?12???? end;

    ?13? /

    ?

    本地動態 SQL 語句

    關于動態 DDL DML 和會話控制的本地動態 SQL 語句如下所示

    1、? Execute immediate <dyn_string>

    2、? Execute immediate <dum_string> using < 參數 >

    3、? Execute immediate <dyn_string>into <index-by array 、嵌套表 >using< 參數 >

    4、? Open cursor for <dyn_string>

    5、? Open cursor form <dyn_string>? using < 參數 >

    6、? Close <cursor>

    7、? Execute immediate ‘begin…..end’ using < 參數 >

    動態 DDL

    動態 DDL 處理的是使用運行時為數據庫對象提供的值的 DDL 語句。動態 DDL 一個典型的用法就是,創建僅在運行時表名和列名才可用的一個動態表。可以使用以下 DDL 語句 :

    1 Execute immediate <dyn_string>

    2 Execute immediate <dum_string> using < 參數 >

    ?

    一個使用動態 DDL 創建表的存儲過程

    create or replace procedure dyn_ddl_demo(tablename varchar2,errnum? outnumber,errtext outvarchar2)
    authidcurrent_user
    is
    ? dyn_string varchar2(
    1000 );
    ? dyn_tablename varchar2(
    30 );
    begin
    ? dyn_tablename:=tablename;
    ? dyn_string:=
    'create table ' ||dyn_tablename||
    ?
    '(order_id number(10) primary key,
    ??? order_date date not null,
    ??? total_qty number,
    ??? total_price number(15,2)
    ?? )'
    ;
    ?? dbms_output.put_line(
    'dyn_string--->' ||dyn_string);
    ?? executeimmediate dyn_string;
    ?? errnum:=
    0 ;
    exception
    ?? whenothersthen
    ????? errnum:=sqlcode;
    ????? errtext:=
    'ERR: Create table ' ||dyn_tablename|| '---' ||sqlerrm;
    end dyn_ddl_demo;

    ?

    動態 SELECTS

    查詢可以返回一行記錄或多行記錄。多行記錄的在《本地批綁定》里再介紹

    單行 Selects

    Execute immediate <dyn_string> into < 變量 > using < 參數 >

    :

    create or replace procedure dyn_selects(
    vid number,
    errnum outnumber,
    errtext outvarchar2)
    is
    ? sql_string varchar2(
    500 );
    ? id number;
    ? uname varchar2(
    200 );
    ? sex varchar2(
    2 );
    ?
    ? upd_string varchar2(
    500 );
    ? vname varchar2(
    200 );
    ? vsex varchar2(
    2 );
    ? vvid number;
    begin
    ? sql_string :=
    'select * from t_user where id=:vid' ;
    ? executeimmediate sql_string into id,uname,sex using vid;
    ? dbms_output.put_line(id||
    '----' ||uname|| '----' ||sex);
    ?
    ? upd_string:=
    'update t_user set name=:vname,sex=:vsex where id=:vvid' ;
    ? vname:=
    ' 傻瓜 ' ;
    ? vsex:=
    'xx' ;
    ? vvid:=
    3 ;
    ?
    ? executeimmediate upd_string using vname,vsex,vvid;
    ? errnum:=
    0 ;
    exception
    ? whenothersthen
    ???? errnum:=sqlcode;
    ???? errtext:=sqlerrm;
    end dyn_selects;

    動態 INSERT UPDATE DELETE

    除了 DDL 語句和 DML 的單 SELECT 語句以外,還能動態地構造 INSERT UPDATE DELETE 語句并在運行時執行它們。可以使用以下語句執行 insert,update,delete 語句

    ?????? Execute immediate <dyn_string>

    ??? Execute immediate <dyn_string> into < 變量 > using < 參數 >

    ?

    posted on 2006-09-28 16:26 有貓相伴的日子 閱讀(722) 評論(0)  編輯  收藏 所屬分類: pl/sql
    本站不再更新,歡迎光臨 java開發技術網
    主站蜘蛛池模板: 国产一级淫片免费播放| 免费一级毛片在线观看| 久久精品熟女亚洲av麻豆| 亚洲高清无码在线观看| 久9热免费精品视频在线观看| 亚洲人成7777| 久久精品国产亚洲AV不卡| 3d成人免费动漫在线观看| 国产精品亚洲专区无码牛牛| 国产成A人亚洲精V品无码性色| 男女免费观看在线爽爽爽视频| 日日摸夜夜添夜夜免费视频| 亚洲黄色在线网站| 亚洲精品tv久久久久久久久久| 2021精品国产品免费观看 | 亚洲手机中文字幕| 亚洲国产人成精品| 青青在线久青草免费观看| 香蕉免费在线视频| 亚洲色偷精品一区二区三区| 国产亚洲一区二区在线观看 | 日韩免费观看的一级毛片| 久久久精品免费视频| 羞羞视频免费网站入口| 亚洲的天堂av无码| 最新国产AV无码专区亚洲| 免费观看大片毛片| 18观看免费永久视频| 国产免费人成视频在线播放播| 亚洲熟妇av午夜无码不卡| 久久精品国产96精品亚洲| 免费人成在线观看播放国产| 免费大片黄在线观看yw| 日日麻批免费40分钟无码| 黄床大片免费30分钟国产精品| 亚洲色成人网站WWW永久四虎| 少妇中文字幕乱码亚洲影视| 国产福利电影一区二区三区,亚洲国模精品一区 | 一级全免费视频播放| 亚洲激情在线观看| 亚洲情XO亚洲色XO无码|