oracle笔记-动态SQL

 我来答
大沈他次苹0B
2022-11-27 · TA获得超过7324个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:177万
展开全部

  第 章 动态SQL

   为何使用动态SQL

  实现动态SQL有两种方式 DBMS_SQL和本地动态SQL(EXECUTE IMMEIDATE)

  主要从以下方面考虑使用哪种方式

         是否知道涉及的列数和类型

  DBMS_SQL包括了一个可以 描述 结果集的存储过程(DBMS_SQL DESCRIBE_COLUMNS) 而本地动态SQL没有

         是否知道可能涉及的绑定变量数和类型

  DBMS_SQL允许过程化的绑定语句的输入 而本地动态SQL需要在编译时确定

         是否使用 数组化 操作(Array Processing)

  DBMS_SQL允许 而本地动态SQL基本不可以 但可以用其他方式实现(对查询可用FETCH BULK COLLECT INTO 对INSERT等 可用一个BEGIN … END块中加循环实现)

         是否在同一个会话中多次执行同一语句

  DBMS_SQL可以分析一次执行多次 而本地动态SQL会在每次执行时进行软分析

         是否需要用REF CURSOR返回结果集

  仅本地动态SQL可用REF CURSOR返回结果集

   如何使用动态SQL

  DBMS_SQL

         调用OPEN_CURSOR获得一个游标句柄

         调用PARSE分析语句 一个游标句柄可以用于多条不同的已分析语句 但一个时间点仅一条有效

         调用BIND_VARIABLE或BIND_ARRAY来提供语句的任何输入

         若是一个查询(SELECT语句) 调用DIFINE_COLUMN或DEFINE_ARRAY来告知Oracle如何返回结果

         调用EXECUTE执行语句

         若是一个查询 调用FETCH_ROWS来读取数据 可以使用COLUMN_VALUE从SELECT列表根据位置获得这些值

         否则 若是一个PL/SQL块或带有RETURN子句的DML语句 可以调用VARIABLE_VALUE从块中根据变量名获得OUT值

         调用CLOSE_CURSOR

  注意这里对任何异常都应该处理 以关闭游标 防止泄露资源

  本地动态SQL

  EXECUTE IMMEDIATE 语句

  [INTO {变量 变量 … 变量N | 记录体}]

  [USING [IN | OUT | IN OUT] 绑定变量 … 绑定变量N]

  [{RETURNING | RETURN} INTO 输出 [ … 输出N]…]

  注意本地动态SQL仅支持弱类型REF CURSOR 即对于REF CURSOR 不支持BULK COLLECT

   最后说明

lishixinzhi/Article/program/Oracle/201311/18948

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式