首页 > 数据库 >PLSQL:动态SQL

PLSQL:动态SQL

时间:2023-07-28 17:38:05浏览次数:32  
标签:语句 PLSQL DBMD 本地 SQL 动态

动态sql是一种在运行时生成和运行sql语句的编程方法论。 比如像蜂窝网查询系统写通用目的灵活程序的时候,当编写必须运行数据库定义语句程序的时候;当在编译时候,不能确定所有的sql语句或者它的输入输出数据以及数据类型的时候,PLSQL动态SQL是很有用的。 PLSQL提供了两种编写动态SQL的方式: ==1.本地动态SQL==:构建和运行动态SQL语句的PLSQL语言; ==2.DBMD_SQL包==:构建、运行和描述动态SQL语句的API; 本地动态SQL代码相比于DBMD_SQL包,更容易阅读和编写,并且运行速度也很快(特别是可以被编译器进行优化的时候)。然而,为了去编写本地动态SQL代码,必须知道动态语句的输入和输出变量的数据以及数据类型。如果在编译时,不知道这些信息,则必须使用DBMD_SQL包。如果你想让存储程序显示的查询结果,也必须使用DBMD_SQL包。 当你需要DBMD_SQL包和本地动态SQL,可以使用DBMS_SQL.TO_REFCURSOR Function和在他们之间进行切换,

一、什么时候需要动态SQL

在PLSQL中,需要动态SQL去运行:

  • 在==编译期间,SQL语句是不清除的==。比如:在编译期间,SELECT语句中包含一个未知的标识符,或者在WHERE条款中包含一个未知的子语句数值;
  • 静态SQL支持的sQL。 如果不用动态SQL,而是使用静态SQL,有下面这些优势:
  • 成功的编译可以验证静态SQL语句引用有效的数据库对象,也可以验证放置必要的优先级访问这些对象。
  • 成功的编译创建schema对象依赖。

二、本地动态SQL

本地动态SQL使用EXECUTE IMMEDIATE语句处理许多的动态SQL语句。 如果动态SQL语句是一个返回多行数据的SELECT语句,本地动态SQL有下面这些选择:

  • 使用携带BULK COLLECT INTO条款的EXECUTE IMMEDIATE语句;
  • 使用OPEN FOR, FETCH和 CLOSE语句。 在本地动态SQL INSERT,UPDATE, DELETE, MERGE和单行SELECT语句像静态SQL一样执行之后,SQL cursor属性一样的工作方式。

标签:语句,PLSQL,DBMD,本地,SQL,动态
From: https://blog.51cto.com/baiblog/6885524

相关文章

  • 如何使用Proxy模式及Java内建的动态代理机制
    http://zhangjunhd.blog.51cto.com/113473/699961.Proxy模式代理模式支持将某些操作从实际的对象中分离出来,通过它的代理类提供处理。这样便于修改和管理这些特定的操作。下面示例一个代理模式的实现。<!--[if!vml]--><!--[endif]--><<interfa......
  • 最快嵌入式数据库CrossDB与SQLite3性能测试报告
    CrossDB是目前最快的高性能嵌入式关系数据库。测试工具:CrossBenchDB驱动:SQLite3CrossDB测试方法:随机访问,单线程,绑定CPU核测试服务器CPU:Intel(R)Xeon(R)[email protected] cachesize36864KBHDD:DELLPERCH755FrontSCSIDisk......
  • docker 链接psql
    拉取镜像dockerpullpostgres:12.3dockerimagesdockerrun--namepostgres12-ePOSTGRES_PASSWORD=123456-eTZ=PRC-p5432:5432-v/home/psql/data:/var/lib/postgresql/data-dpostgres:12.3查看是否运行成功dockerps进入系统默认root切换用户查看......
  • SQL Server 多行合并成一行,逗号分隔实现
    我们写sql脚本处理数据的时候针对部分数据进行groupby分组,分组后需要将部分数据放入分组后的行里面以逗号分隔。举一个简单例子:   如上图的数据,需要对学生进行分组,取得学生都参与了哪些学科的考试和所有总分。如下图这种数据 目前有两种方案,1.在SQLServer201......
  • SQL Server CURRENT_TIMESTAMP()实例讲解
    CURRENT_TIMESTAMP()函数:SQLServer中的此函数用于返回当前日期和时间。输出的格式如下。'YYYY-MM-DDhh:mm:ss.mmm'特征:此函数用于查找当前日期和时间。此函数位于日期函数下。此函数不接受任何参数。在某些代码中,该函数也可以用作默认值。用法:CURRENT_TIMESTAMP......
  • 基于 Kubernetes 部署 MySQL 数据库
    本文将介绍如何基于Kubernetes部署MySQL数据库。创建服务Service创建一个Service为即将部署的MySQL数据库固定连接的IP,同时提供负载均衡,下面是mysql-service.yaml文件的内容: yaml复制代码apiVersion:v1kind:Servicemetadata:name:mysqlspec:s......
  • 数据源为postgresSQL的docker版nacos
    1.首先编写Dcokerfile,基础镜像为ubuntu:18.04,安装Java环境等FROMubuntu:18.04ENVJAVA_DIR=/usr/localENVJAVA_HOME=$JAVA_DIR/java8ENVPATH=$PATH:$JAVA_HOME/binENVNACOS_VERSION=2.2.0.1ENVNACOS_HOME=/nacos#安装jdkCOPY./jdk-8u11-linux-x64.tar.gz$JAVA......
  • Mybatis之动态查询:choose、when和otherwise标签使用
    【使用场景】有的时候,我们需要根据不同的选择,关联不同的表,这个时候<choose/><when/>和<otherwise>标签就发挥作用了。比如说,内部用户和外部用户表是分开的,在查询用户的时候,我们就需要根据角色类型去选择不同的关系表进行关联。SELECT*FROMrolerLEFTJOIN<!--当角色分类......
  • mysql 中的 having 与 order by 的区别与联系举例说明
    HAVING和ORDERBY都是在查询语句中用于对结果进行排序的子句,但它们的使用场景和作用略有不同。区别:HAVING子句用于在GROUPBY子句后对分组结果进行筛选,只返回满足条件的分组。它通常与聚合函数一起使用,用于筛选分组后的结果集。HAVING子句是在分组后进行筛选,可以使用聚合函数和......
  • mysql 的左连结 右边结 内连结 外连结和全连结的区别及使用场景举例
    在MySQL中,左连接(LEFTJOIN)、右连接(RIGHTJOIN)、内连接(INNERJOIN)、外连接(OUTERJOIN)和全连接(FULLJOIN)是常用的连接操作,用于联接多个表。这些连接操作的区别如下:左连接(LEFTJOIN):返回左表中的所有记录,以及与右表中匹配的记录。如果右表没有匹配的记录,则返回NULL值。左连接使用L......