<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片在线观看免费| 亚洲国产精品自在线一区二区 | 亚洲三级在线免费观看| 2015日韩永久免费视频播放| 91精品国产亚洲爽啪在线观看| 99久久免费精品视频| 亚洲精品视频在线观看视频| 182tv免费观看在线视频| 亚洲成在人线中文字幕| 毛片高清视频在线看免费观看| 亚洲看片无码在线视频| 欧洲美熟女乱又伦免费视频| 蜜芽亚洲av无码一区二区三区| 免费成人黄色大片| 国产一区二区三区免费观看在线| 亚洲国产精品va在线播放| 131美女爱做免费毛片| 亚洲综合伊人制服丝袜美腿| 亚洲第一页在线播放| 毛片免费视频在线观看| 亚洲成av人在线观看网站| 免费人成视网站在线观看不卡| 亚美影视免费在线观看| 久久久久无码精品亚洲日韩| 91麻豆最新在线人成免费观看 | 猫咪社区免费资源在线观看| 亚洲人成欧美中文字幕| 一本久到久久亚洲综合| 免费91最新地址永久入口| 激情综合亚洲色婷婷五月APP| 国产色爽女小说免费看| 国产午夜无码片免费| 亚洲AV无码一区二区三区人| 午夜亚洲av永久无码精品 | 24小时日本在线www免费的| 理论秋霞在线看免费| 亚洲视频一区调教| 日本一道在线日本一道高清不卡免费 | 国产在线观看片a免费观看| 国产精品观看在线亚洲人成网|