热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:loopwithinfields

 setserveroutputon

 

set serveroutput on
declare
l_cur SYS_REFCURSOR ;
PROCEDURE CursorOutput(
p_refcursor
IN OUT SYS_REFCURSOR
)
AS
l_desc DBMS_SQL.DESC_TAB ;
l_cols BINARY_INTEGER ;
l_cursor BINARY_INTEGER ;
v_varchar2
VARCHAR2( 4000 ) ;
v_number
NUMBER ;
v_date DATE ;
l_data
varchar2( 32767 ) ;
l_columnValue
VARCHAR2( 32767 ) ;
l_processedRows
Number := 0;
BEGIN
/* Convert refcursor "parameter" to DBMS_SQL cursor... */
l_cursor :
= DBMS_SQL.TO_CURSOR_NUMBER( p_refcursor );
/* Describe the cursor... */
DBMS_SQL.DESCRIBE_COLUMNS( l_cursor, l_cols, l_desc );
/* Define columns to be fetched. We‘re only using V2, NUM, DATE for example...
for a complete list of the col_types this link is accessible.
http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements2a.htm#45504
http://forums.oracle.com/forums/thread.jspa?threadID=912475
if not a usable type, will throw new exception
*/
FOR i IN 1 .. l_cols LOOP
IF l_desc(i).col_type = 2 THEN
DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_number);
ELSIF l_desc(i).col_type
= 12 THEN
DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_date);
ELSif l_desc(i).col_type
= 01 or l_desc(i).col_type = 96 then
DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_varchar2,
4000);
else
--raise an exception if the user‘s query contains a datatype not (yet) supported by this procedure
RAISE_APPLICATION_ERROR(-20000, Invalid Data Type for conversion to delimited file. { || l_desc(i).col_name || });
END IF;
END LOOP;
/* -- print out the column names if desired
FOR i IN 1 .. l_cols LOOP
dbms_output.put_line(‘** ‘ || l_desc(i).col_name) ;
END LOOP;
*/
/* Fetch all data... */
WHILE DBMS_SQL.FETCH_ROWS(l_cursor) > 0 LOOP
dbms_output.put_line(
LINE: || l_processedRows || ‘‘);
FOR i IN 1 .. l_cols LOOP
if l_desc(i).col_type = 12 THEN --we are in a date
DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_date);
v_varchar2 :
= to_char(v_date , dd-MON-yyyy ) ;
elsif l_desc(i).col_type
= 2 THEN --we are in a number
DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_number);
v_varchar2 :
= to_char(v_number) ;
else --treat it as a string (should be varchar2,char,etc)
DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_varchar2);
IF v_varchar2 IS NOT NULL THEN
v_varchar2 :
= " || v_varchar2 || " ;
ELSE
v_varchar2 :
= ‘‘;
END IF ;
end if ;
dbms_output.put_line(l_desc(i).
col_name || => || v_varchar2) ;
END LOOP;
l_processedRows :
= l_processedRows + 1 ;
END LOOP;
dbms_sql.close_cursor(l_cursor);
dbms_output.put_line(
I found and processed || l_processedRows || rows .);
END;
begin
open l_cur for select * from temp;
CursorOutput(p_refcursor
=> l_cur) ;
end ;
/

 


set serveroutput ondeclare   l_cur SYS_REFCURSOR ;
    PROCEDURE CursorOutput(                            p_refcursor        IN OUT SYS_REFCURSOR                         )      AS        l_desc          DBMS_SQL.DESC_TAB ;        l_cols          BINARY_INTEGER ;        l_cursor        BINARY_INTEGER ;        v_varchar2      VARCHAR2( 4000 ) ;        v_number        NUMBER ;        v_date          DATE ;        l_data          varchar2( 32767 ) ;        l_columnValue   VARCHAR2( 32767 ) ;        l_processedRows Number := 0;    BEGIN
        /* Convert refcursor "parameter" to DBMS_SQL cursor... */        l_cursor := DBMS_SQL.TO_CURSOR_NUMBER( p_refcursor );        /* Describe the cursor... */        DBMS_SQL.DESCRIBE_COLUMNS( l_cursor, l_cols, l_desc );
        /* Define columns to be fetched. We‘re only using V2, NUM, DATE for example...        for a complete list of the col_types this link is accessible.        http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements2a.htm#45504        http://forums.oracle.com/forums/thread.jspa?threadID=912475        if not a usable type, will throw new exception        */         FOR i IN 1 .. l_cols LOOP             IF l_desc(i).col_type = 2 THEN               DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_number);            ELSIF l_desc(i).col_type = 12 THEN               DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_date);            ELSif l_desc(i).col_type = 01 or l_desc(i).col_type = 96 then               DBMS_SQL.DEFINE_COLUMN(l_cursor, i, v_varchar2, 4000);            else                --raise an exception if the user‘s query contains a datatype not (yet) supported by this procedure                RAISE_APPLICATION_ERROR(-20000, ‘Invalid Data Type for conversion to delimited file. {‘ || l_desc(i).col_name || ‘}‘);            END IF;          END LOOP;

        /* -- print out the column names if desired             FOR i IN 1 .. l_cols LOOP                     dbms_output.put_line(‘** ‘ || l_desc(i).col_name) ;             END LOOP;        */
         /* Fetch all data... */         WHILE DBMS_SQL.FETCH_ROWS(l_cursor) > 0 LOOP             dbms_output.put_line(‘LINE: ‘  || l_processedRows || ‘‘);             FOR i IN 1 .. l_cols LOOP                 if l_desc(i).col_type = 12 THEN --we are in a date                    DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_date);                    v_varchar2 := to_char(v_date , ‘dd-MON-yyyy‘ ) ;                 elsif  l_desc(i).col_type = 2 THEN --we are in a number                    DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_number);                    v_varchar2 := to_char(v_number) ;                 else --treat it as a string (should be varchar2,char,etc)                    DBMS_SQL.COLUMN_VALUE(l_cursor, i, v_varchar2);                    IF v_varchar2 IS NOT NULL THEN                       v_varchar2 := ‘"‘ || v_varchar2 || ‘"‘ ;                       ELSE                       v_varchar2 := ‘‘;                    END IF ;                 end if ;                 dbms_output.put_line(l_desc(i).col_name || ‘=>‘ || v_varchar2) ;             END LOOP;             l_processedRows := l_processedRows + 1 ;          END LOOP;
          dbms_sql.close_cursor(l_cursor);          dbms_output.put_line(‘I found and processed  ‘  || l_processedRows || ‘ rows .‘);
    END;begin        open l_cur for select * from temp;        CursorOutput(p_refcursor => l_cur) ;end ;/


推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了在使用 SmartUpload 组件进行文件上传时,如何正确配置和查找文件保存路径。通过具体的代码示例和步骤说明,帮助开发者快速解决上传路径配置的问题。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
author-avatar
寡凫lo单鹄官方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有