PL/SQL在from后面使用变量,以及输入&字符的方法

如题所述

第1个回答  2022-10-30

   在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_SQL OPEN_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_SQL PARSE( V_CursorId V_SqlStr DBMS_SQL V ) ;

  DBMS_SQL DEFINE_COLUMN( V_CursorId ) ;

  IF DBMS_SQL EXECUTE( V_CursorId ) = THEN NULL ; END IF ;

  IF DBMS_SQL FETCH_ROWS( V_CursorId ) = THEN RETURN ; END IF ;

  DBMS_SQL COLUMN_VALUE( V_CursorId V_RtnVal ) ;

  DBMS_SQL CLOSE_CURSOR( V_CursorId ) ;

  RETURN V_RtnVal ; EXCEPTION WHEN OTHERS THEN DBMS_SQL CLOSE_CURSOR( V_CursorId ) ; DBMS_OUTPUT PUT_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( SPR TESTMAN

  SQL> select GET_TABLE_COUNT( U_Oausr tm ) from dual ;

  GET_TABLE_COUNT( U_OAUSR TM

  SQL>

  说明 DBMS_SQL DEFINE_COLUMN( V_CursorId ) ; 里的 是什么意思? DEFINE_COLUMN是用作定义数据类型的 不同的数据类型有不太的定义方式 这里面的 通俗点说就是 与 一样的数据类型的意思 比如定义长度为 的varchar 型的列的时候 可以简化为这样定义 DBMS_SQL DEFINE_COLUMN( V_CursorId tmpStr ) 更多的数据类型列的定义请查看oracle的pl/sql文档 里面很全 另外 怎么用联编变量? 联编变量是一种非常好的传递参数的方式 而且不容易出错 但是既然称之为 联编变量 那就是它只能对Oracle中认为的变量进行联编 而刚才上面的例子中 表面是不能够作为变量的 因此不可以联编 Oracle中认为出现在逻辑表达式右边的才是变量 例如可以这样进行联编变量 V_SqlStr := SELECT COUNT(*) FROM TAB WHERE TName LIKE :I_Arg ;

  DBMS_SQL PARSE( V_CursorId V_SqlStr DBMS_SQL V ) ; V_TabName := MYTAB ; DBMS_SQL BIND_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> mit;

  Commit plete

  SQL> set define off;

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

  SQL> mit;

  Commit plete

  SQL> select * from test ;

lishixinzhi/Article/program/Oracle/201311/16669

相似回答