sql server、db2、oracle 預存程序動態sql語句樣本,db2oracle

來源:互聯網
上載者:User

sql server、db2、oracle 預存程序動態sql語句樣本,db2oracle

Oracle

CREATE OR REPLACE PROCEDURE a_testAS    t_sql   VARCHAR2(2000);    t_a     VARCHAR2(20);    t_b     VARCHAR2(20);    t_c     VARCHAR2(20);    t_d     VARCHAR2(20);BEGIN    t_c   := 'f';    t_d   := 'g';            --這裡可為insert 等任何sql語句.    t_sql := 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';        EXECUTE IMMEDIATE t_sql    INTO  t_a, t_b  --如果不需要查詢賦值,這裡不用寫 INTO XXX語句.    USING t_c, t_d  -- 如果不需要使用變數,不用寫USING XXX語句.    ;END a_test;/

--帶返回遊標的動態執行語句.CREATE OR REPLACE PROCEDURE a_test2(    o_cursor OUT SYS_REFCURSOR)AS    t_sql   VARCHAR2(2000);    t_a     VARCHAR2(20);    t_b     VARCHAR2(20);    t_c     VARCHAR2(20);    t_d     VARCHAR2(20);BEGIN    t_c   := 'f';    t_d   := 'g';            --這裡可為insert 等任何sql語句.    t_sql := 'SELECT * FROM t1 WHERE c = :tempC OR c = :tempD';    OPEN  o_cursor FOR t_sql    USING t_c, t_d   -- 同樣如果不需要使用變數,不用寫USING XXX語句.    ;END a_test2;/


SQL Server
CREATE PROCEDURE a_testAS    DECLARE @t_sql   NVARCHAR(2000);  --sql server 動態語句要申明為NVARCHAR類型.    DECLARE @t_a     VARCHAR(20);    DECLARE @t_b     VARCHAR(20);    DECLARE @t_c     VARCHAR(20);    DECLARE @t_d     VARCHAR(20);BEGIN    SET @t_c = 'f';    SET @t_d = 'g';        --這裡可為insert 等任何sql語句.    SET @t_sql = 'SELECT @tempA = MAX(a), @tempB = MAX(b) FROM t1 WHERE c = @tempC OR c = @tempD';        --不可在EXECUTE SP_EXECUTESQL後邊拼接字串    EXECUTE SP_EXECUTESQL @t_sql        --如果不帶參數,以下申明變數及傳入參數都不需要寫.    --申明變數類型及出入參.必須一行寫完,不能換行.    ,N'@tempA VARCHAR(20) OUT, @tempB VARCHAR(20) OUT, @tempC VARCHAR(20), @tempD VARCHAR(20)'    -- 參數值.  傳入變數的順序要與申明變數的順序一致,    ,@t_a OUT, @t_b OUT, @t_c, @t_d    ;ENDGO--sql server返回遊標與普通的語句一樣,直接將t_sql賦值成 select * from XXX 即可.

Db2

CREATE PROCEDURE a_test(    v_c           VARCHAR(20))BEGIN    DECLARE t_sql VARCHAR2(2000);    DECLARE t_a   VARCHAR2(20);    DECLARE t_b   VARCHAR2(20);    DECLARE t_c   VARCHAR2(20);    DECLARE t_d   VARCHAR2(20);    -- FOR 後邊的t_stmt要與下邊的 prepare後的變數一致,其類型為 statement.    DECLARE t_cur CURSOR FOR t_stmt;    SET t_c = 'f';    SET t_d = 'g';        --這裡可為insert 等任何sql語句.    SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';        --我目前在這裡沒找到其它方式來替代,只能使用遊標讀取:    PREPARE t_stmt FROM t_sql;        OPEN t_cur    --如果不需要使用變數,不用寫USING XXX語句.    USING t_c, t_d    ;        FETCH t_cur INTO t_a, t_b;    CLOSE t_cur;END

/*帶遊標返回的動態語句與普通語句一樣,只是申明遊標時,要申明傳回型別的遊標並且在begin關鍵字之前需要插入:DYNAMIC RESULT SETS 1LANGUAGE SQL*/CREATE PROCEDURE a_test2(    v_c           VARCHAR(20))DYNAMIC RESULT SETS 1LANGUAGE SQLBEGIN    DECLARE t_sql VARCHAR2(2000);    DECLARE t_a   VARCHAR2(20);    DECLARE t_b   VARCHAR2(20);    DECLARE t_c   VARCHAR2(20);    DECLARE t_d   VARCHAR2(20);    -- FOR 後邊的t_stmt要與下邊的 prepare後的變數一致,其類型為 statement.    DECLARE t_cur CURSOR WITH RETURN FOR t_stmt;    SET t_c = 'f';    SET t_d = 'g';        --這裡可為insert 等任何sql語句.    SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD';        PREPARE t_stmt FROM t_sql;        OPEN t_cur    --如果不需要使用變數,不用寫USING XXX語句.    USING t_c, t_d    ;END


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.