Oracle 取出动态sql 执行的结果的两种方式

2023-11-04

----------------------------以下是怎么取出动态sql执行结果的两种方式---------------------------------------------

第一种:直接  execute   immediate  ‘insert into   newTable  (id,name ) select id,name from dual’; 执行后 放到一个新的表里  

第二种方式:放到REF CURSOR 声明REF游标 

该方式分为两种:

第一种取出整表的所有列(USER_LOG  为我数据库中的表 ,自己测试需替换为自己的表)

create or replace procedure testdesclare1  is
v_sql varchar2(1000);
tp1 varchar2(100);
tp2 varchar2(50);
  
tp8 varchar2(50);
tp9 varchar2(50);
 
begin

    select to_char(sysdate,'yyyy')||'0101' into tp9 from dual; 
    select to_char(sysdate,'yyyyMMdd') into tp8 from dual;
   
    tp1:='select * from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')';
    tp2:=' between '||tp9||' and '||tp8;
    --拼接动态sql语句
    v_sql :=tp1||tp2;
    --declare是执行一个代码块,开始有declare  begin end;为结构体 。 一个存储过程begin end 中只能声明一个declare
    declare
      --声明一个行类型变量USER_LOG%ROWTYPE  其中USER_LOG 与上面动态sql中的 查询表名一致
    r_emp USER_LOG%ROWTYPE;  --声明一个行类型变量
    TYPE c_type IS REF CURSOR; --声明REF游标类型
    cur   c_type; --声明REF游标类型的变量 
    begin   -- 结构体开始
     Open  cur For  v_sql; 
        loop
         fetch cur into r_emp;
         exit when cur%notfound;
         dbms_output.put_line(r_emp.id||'='||r_emp.result);--取出里面的列值
         /*结果是一个list:5175=共成功导入1条数据
                                     5176=共成功导入1条数据
          */
        end loop;
      close cur; 
     end; -- 结构体结束

end testdesclare1;

第一种取出表中的其中几列(USER_LOG  为我数据库中的表 ,自己测试需替换为自己的表)

create or replace procedure testdesclare1  is
v_sql varchar2(1000);
tp1 varchar2(100);
tp2 varchar2(50);
  
tp8 varchar2(50);
tp9 varchar2(50);
 
begin

    select to_char(sysdate,'yyyy')||'0101' into tp9 from dual; 
    select to_char(sysdate,'yyyyMMdd') into tp8 from dual;
   
    tp1:='select  id,result from USER_LOG where to_char(operate_time,'||'''yyyyMMdd'''||')';
    tp2:=' between '||tp9||' and '||tp8;
    --拼接动态sql语句
    v_sql :=tp1||tp2;


    --declare是执行一个代码块,开始有declare  begin end;为结构体 。 -一个存储过程begin end 中只能声明一个declare
    declare
    --声明一个行类型变量USER_LOG%ROWTYPE  其中USER_LOG 与上面动态sql中的 查询表名一致
    r_emp_id USER_LOG.id%TYPE;  --声明一个列类型变量,与上面的整表不一致 

    r_emp_result USER_LOG.result%TYPE;  --声明一个列类型变量,与上面的整表不一致 
    TYPE c_type IS REF CURSOR; --声明REF游标类型
    cur   c_type; --声明REF游标类型的变量 
    begin -- 结构体开始
     Open  cur For  v_sql; 
        loop
         fetch cur into r_emp_id ,r_emp_result ;
         exit when cur%notfound;
         dbms_output.put_line(r_emp_id||'='||r_emp_result);--取出里面的列值
         /*结果是一个list:5175=共成功导入1条数据
                                     5176=共成功导入1条数据
          */
        end loop;
      close cur; 
     end; -- 结构体结束

end testdesclare1;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 取出动态sql 执行的结果的两种方式 的相关文章

随机推荐

  • crontab每分钟执行一次任务

    0 实例 在 home 下面写了一个test sh bin sh echo hello gt home hello txt echo hello hello hello hello gt gt home hello txt 还是用这个比较好
  • 五、C++语言初阶:文件

    5 文件 5 1 流 流 数据从一个对象到另一个对象的传输 功能 标准输入输出 文件处理 分类 含义 文本流 一串ASCII字符 二进制流 一串二进制 5 2 流类型 标准库定义了三大类流类型 标准I O流 文件流 字符串流 标准I O流
  • Kaggle 数据竞赛

    文章目录 一 前言 二 主要内容 1 评估 2 时间线 3 奖金 4 代码要求 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 使用机器学习技术 通过匿名健康特征的测量数据来检测疾病 比赛目
  • 动力节点最新Java17零基础视频第二章 初识Java

    计算机概述 计算机是一种现代化的电子设备 它能够接受 存储 处理和输出数据 计算机由硬件和软件两部分组成 硬件包括中央处理器 CPU 内存 硬盘 显示器 键盘 鼠标等部件 软件则包括系统软件和应用软件 计算机可以进行各种操作 如文字处理 图
  • 当定制化的呼声响起,MaaS就在百融云的掌心

    中国的TMT产业 似乎每隔几年都要经历一轮痛苦的反思 而这次的新课题 是AI到底能不能拯救中国的软件行业 大洋彼岸的Adobe 用订阅制付费牢牢拴住离不开自己的专业视频剪辑用户 Shopify用收租的模式 为电商卖家提供搭建网店的技术和模版
  • BigDecimal基本知识

    在我们的日常计算中 有时会涉及到比较大的数字之间的计算 如 超大金额的计算 如果是韩元等的话 还要大 这时 使用float double这样的浮点数就不那么准确了 因为不论是float 还是double都是浮点数 而计算机是二进制的 浮点数
  • 如何使用github中的pull request功能?

    pull request是社会化编程的象征 通过这个功能 你可以参与到别人开发的项目中 并做出自己的贡献 pull request是自己修改源代码后 请求对方仓库采纳的一种行为 github入门与实践 下面具体说一下github中使用pul
  • Unity TimeLine实用功能讲解

    这一个技术相对于其他动画系统 最大的区别就是 TimeLine针对多个游戏物体做出的一系列动画 主要用于过场动画的制作 实现电影级的那种分镜效果 注意 使用TimeLine需要2017以上的版本 在菜单栏中点Window 找到TimeLin
  • uView 中 Steps 步骤条,竖向步骤条不展示

    问题描述 Steps 步骤条在竖向时候步骤条竖线不展示 解决方法 找到uview ui components u steps item u steps item vue文件 设置 style height 100 即可 如图
  • 如何在MacOS上玩儿汇编?

    在Mac上写汇编还是相当方便的 本文通过写一个Helloworld程序来入门 首先 MacOS 自带nasm 只是版本有点老 编译不了64位程序 只要上官网下一个最新的 替换一下就行了 有一点需要注意的是mac上gcc编译 o文件的默认入口
  • jquery笔记

    收起展开
  • mysql8安装以及配置、参数优化

    1 配置bin到path 2 mysql解压版本在根目录创建my ini 3 初始化数据库 mysqld initialize console 这里会生成一个初始密码 需要记录下来 否则需要删除datadir目录重新初始化 D dev my
  • Math 对象

    Math 用于执行数学任务 不像 Date 和 String 那样是对象的类 因此没有构造函数 Math 方法 Math ceil 对小数进行上舍入 Math ceil 25 5 返回26 Math ceil 25 5 返回 25 Math
  • 如何使用百度baidu对某个特定网站进行站内搜索/检索

    很多网站自己提供了站内搜索 检索的功能 比如说GitHub或一些购物网站 但是也有很多网站并没有提供站内检索的功能 此时可以利用百度baidu对特定的网站进行检索 方法很简单 在要检索的关键字前加上inurl 和网址即可
  • 【Qt Creator快速入门第三版学习笔记】——第1章 Qt Creator简介

    第1章 Qt Creator简介 文章目录 第1章 Qt Creator简介 前言 1 1 Qt Creator的下载与安装 1 2Qt Creator环境介绍 1 2 1 主界面介绍 1 菜单栏 Menu Bar 2 模式选择器 Mode
  • ceres-solver库编译说明

    0 ceres solver简介 Ceres Solver是一个C 环境下的非线性最小二乘问题的求解工具包 可用来建模并解决大型复杂的非线性最小二乘问题 这个工具包已经广泛被用于很多商业软件中 在google project里面有它的主页
  • Oracle PL/SQL使用动态SQL

    动态SQL 意思是字符串的内容的内容当做SQL来执行 语法 execute immediate 字符串内容 execute 存储过程 参数 连接符 把左右两边的字符串的字符串连起来 合起来一个字符串 count 遇到的情况和对策 1 非查询
  • 集合框架集-List

    1 UML 统一建模语言 例如 类图 用例图等等 2 Collection接口 1 1 集合框架的顶级接口 1 2 是Set和List的父接口 1 3 但不是Map的父接口 集合中只能添加引用类型数据 Collection接口 是集合框架的
  • Unity3d Note5(鼠标打飞碟(Hit UFO)游戏)

    1 作业要求 2 具体设计 1 制备预制体作为飞碟 2 了解一下Singleton模板类 3 了解一下工厂模式 3 设计具体要实现的类 3 程序代码 成果视频 1 作业要求 编写一个简单的鼠标打飞碟 Hit UFO 游戏 游戏内容要求 游戏
  • Oracle 取出动态sql 执行的结果的两种方式

    以下是怎么取出动态sql执行结果的两种方式 第一种 直接 execute immediate insert into newTable id name select id name from dual 执行后 放到一个新的表里 第二种方式