|
嗨 甲骨文【4】(1)
CSdn.net/Emoticons/wink_smile.gif">动态SQL的使用
Oracle实际上比SQL Server好一些,但绝对没有传说中那么强。这是这些天一识Oracle庐山真面目的感受。看来好多事情多如此,听的要比见到的完美。接着第一句说,Oracle的动态SQL就很棒,我专门学习了一下。记录如下。
先说说动态SQL是什么,看这句熟悉的: select * from a_table where a_variable=a_declarevalue; 再写句动态的: select * from a_table where a_variable=:a_dynamicvalue; 两句的区别很明显,后者多一个占位符,这个以冒号开始的变量可以灵活地执行不同条件的where语句。 这是动态SQL语句的优势,接下来的功能就是它的独门功夫了--执行DDL,DCL语句。
动态SQL的执行 1 EXECUTE IMMEDIATE语句
EXECUTE IMMEDIATE dynamic_string [INTO {define_variable[,define_variable]… record}] [USING [IN OUT IN OUT] bind_argument[,[IN OUT \ IN OUT] bind_argumnet]…] [{RETURNING RETURN} INTO bing_argument[,bind_argument]…];
下面是它的使用
处理DDL操作(CREATE,ALTER,DROP)XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> CREATE OR REPLACE PROCEDURE drop_table(table_name VARCHAR2) IS Sql_statemet VARCHAR2(100); BEGIN Sql_statement:=’DROP TABLE’ table_name; EXECUTE IMMEDIATE sql_statement; END; / 建立过程drop_table后,调用如下: SQL> exec drop_table(‘worker’) 处理DCL操作(GRANT REVOKE) SQL> conn system/manager CREATE OR REPLACE PROCEDURE grant_sys_priv(priv VARCHAR2,username VARCHAR2) IS Sql_stat VARCHAR2(100); BEGIN Sql_stat:=’GRANT “ priv ’ TO ’ username; EXECUTE IMMEDIATE sql_stat; END; / 调用 SQL> exec grant_sys_priv(‘CREATE SESSION’,’SCOTT’)
|