oracle – 如何动态获取记录中的字段名称和值

oracle – 如何动态获取记录中的字段名称和值,第1张

概述我有一个过程,它接收170列的记录作为输入参数(它基于表的结构). 在该过程中,我想调用一个调试过程,其中一个参数是一个包含该记录的所有字段名称和值的文本字符串. 例如: CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%ROWTYPE) as text VARCHAR2(10000) := NULL;BEGIN . 我有一个过程,它接收170列的记录作为输入参数(它基于表的结构).

在该过程中,我想调用一个调试过程,其中一个参数是一个包含该记录的所有字段名称和值的文本字符串.

例如:

CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%rOWTYPE) as    text VARCHAR2(10000) := NulL;BEGIN    ...    text := 'pi_record.column1 = ' || pi_record.column1 || CHR(13) ||            'pi_record.column2 = ' || pi_record.column2 || CHR(13) ||            ...            'pi_record.column170 = ' || pi_record.column170;    logging_procedure (text);    ...END;

有没有简单的方法以动态方式实现这一点(循环记录字段名称和值)而不枚举所有这些?

也许是这样的:

CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%rOWTYPE) as    text VARCHAR2(10000) := NulL;BEGIN    ...          LOOP in pi_record.columns        text := text || CHR(13) || pi_record.column.name || ' : ' || pi_record.column.value    END LOOP    logging_procedure (text);    ...END;

非常感谢,

解决方法 这是一种方法.包规范包含一个变量,其类型与我们将在过程中使用的变量匹配.

sql> set serveroutput onsql> create or replace package pkg_xxx  2  as  3     dept_rec   dept%rowtype;  4  end;  5  /Package created.sql> create or replace procedure xxx (pi_record in dept%rowtype)  2  as  3     text    varchar2 (10000) := null;  4     l_str   varchar2 (200);  5     l_var   varchar2 (200);  6  begin  7     pkg_xxx.dept_rec := pi_record;  8  9     for cur_r in (  select column_name 10                       from user_tab_columns 11                      where table_name = 'DEPT' 12                   order by column_ID) 13     loop 14        l_str := 15              'begin ' 16           || ':x := to_char(pkg_xxx.dept_rec.' 17           || cur_r.column_name 18           || '); ' 19           || 'end; '; 20 21        execute immediate l_str using out l_var; 22 23        text := text || chr (10) || cur_r.column_name || ' = ' || l_var; 24     end loop; 25 26     dbms_output.put_line (text); 27  end; 28  /Procedure created.

现在,让我们将一些东西传递给程序,看看会发生什么:

sql> declare  2     cursor c1  3     is  4        select *  5          from dept  6         where deptno = 10;  7  8     c1r   c1%rowtype;  9  begin 10     open c1; 11     fetch c1 into c1r; 12     close c1; 13 14     xxx (c1r); 15  end; 16  /DEPTNO = 10Dname = ACCOUNTINGLOC = NEW YORKPL/sql procedure successfully completed.sql>

嗯,有点作品(如果这就是你问的那个).当然,这只是一个例子,如果你想获得一些非常聪明的东西,你必须修改它(提示:DATE列).

总结

以上是内存溢出为你收集整理的oracle – 如何动态获取记录中的字段名称和值全部内容,希望文章能够帮你解决oracle – 如何动态获取记录中的字段名称和值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存