熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

PL/SQL在from後面使用變量,以及輸入&字符的方法

2013-11-13 15:25:13  來源: Oracle 

  在from後面使用變量

  CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR
I_Owner IN VARCHAR DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_CursorId INTEGER ;
V_SqlStr VARCHAR() ;
BEGIN
V_CursorId := DBMS_SQLOPEN_CURSOR ;

  IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner ) ) ) ) = THEN
V_SqlStr := SELECT COUNT(*) FROM || I_TabNa ;
ELSE
V_SqlStr := SELECT COUNT(*) FROM || I_Owner|| || I_TabNa ;
END IF ;

  DBMS_SQLPARSE( V_CursorId V_SqlStr DBMS_SQLV ) ;

  DBMS_SQLDEFINE_COLUMN( V_CursorId ) ;

  IF DBMS_SQLEXECUTE( V_CursorId ) = THEN
NULL ;
END IF ;

  IF DBMS_SQLFETCH_ROWS( V_CursorId ) = THEN
RETURN ;
END IF ;

  DBMS_SQLCOLUMN_VALUE( V_CursorId V_RtnVal ) ;

  DBMS_SQLCLOSE_CURSOR( V_CursorId ) ;

  RETURN V_RtnVal ;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQLCLOSE_CURSOR( V_CursorId ) ;
DBMS_OUTPUTPUT_LINE( V_SqlStr || SQLERRM ) ;
RETURN ;
END GET_TABLE_COUNT;

  試驗結果
SQL> select GET_TABLE_COUNT( tab ) from dual ;

  GET_TABLE_COUNT(TAB)

  SQL> select GET_TABLE_COUNT( spr testman) from dual ;

  GET_TABLE_COUNT(SPRTESTMAN

  SQL> select GET_TABLE_COUNT( U_Oausr tm) from dual ;

  GET_TABLE_COUNT(U_OAUSRTM

  SQL>

  說明
DBMS_SQLDEFINE_COLUMN( V_CursorId ) ; 裡的是什麼意思?
DEFINE_COLUMN是用作定義數據類型的不同的數據類型有不太的定義方式這裡面的通俗點說就是一樣的數據類型的意思比如定義長度為的varchar型的列的時候可以簡化為這樣定義DBMS_SQLDEFINE_COLUMN( V_CursorId tmpStr )更多的數據類型列的定義請查看oracle的pl/sql文檔裡面很全
另外怎麼用聯編變量?
聯編變量是一種非常好的傳遞參數的方式而且不容易出錯但是既然稱之為聯編變量那就是它只能對Oracle中認為的變量進行聯編而剛才上面的例子中表面是不能夠作為變量的因此不可以聯編Oracle中認為出現在邏輯表達式右邊的才是變量例如可以這樣進行聯編變量

V_SqlStr := SELECT COUNT(*) FROM TAB WHERE TName LIKE :I_Arg ;

  DBMS_SQLPARSE( V_CursorId V_SqlStr DBMS_SQLV ) ;
V_TabName := MYTAB ;
DBMS_SQLBIND_VARIABLE( V_CursorId :I_Arg V_TabName || % ) ;

  i以後的版本這樣寫也行
CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR
I_Owner IN VARCHAR DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_TabName VARCHAR() ;
BEGIN
IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner ) ) ) ) = THEN
V_TabName := I_TabNa ;
ELSE
V_TabName := I_Owner|| || I_TabNa ;
END IF ;

  EXECUTE IMMEDIATE SELECT COUNT(*) FROM || V_TabName INTO V_RtnVal ;
RETURN V_RtnVal ;

  EXCEPTION
WHEN OTHERS THEN
RETURN ;
END GET_TABLE_COUNT ;

  SQL*PLUS環境輸入&字符的方法

  我們知道在SQL*PLUS默認環境裡會把&字符當成變量來處理

  有些時候我們也需要在SQL>的符號下輸入&字符 只需要改變SQL*PLUS下一個環境變量define即可
       
          SQL> set define off;

  是把默認的&綁定變量的功能取消 可以把&字符當成普通字符處理

  SQL> set define on;

  打開&綁定變量的功能 &後面的字符串當變量使用

  SQL> show define;

  查看當前SQL*PLUS的define狀態
       
        舉例說明:
               
        SQL> CREATE TABLE TEST (
                  ID    NUMBER ()    PRIMARY KEY
                  NAME  VARCHAR ());
       
        SQL> show define;
        define & (hex )                 
       
        SQL> insert into test values(sgs&a&n);
        Enter value for a: abc
        Enter value for n:
        old   : insert into test values(sgs&a&n)
        new   : insert into test values(sgsabc)

   row created

  SQL> commit;

  Commit complete

  SQL> set define off;

  SQL> insert into test values(sgs&a&n);
       
        row created

  SQL> commit;

  Commit complete

  SQL> select * from test;

  ID NAME
       
         sgsabc
         sgs&a&n


From:http://tw.wingwit.com/Article/program/Oracle/201311/16669.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.