在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