oracle – 如何动态获取记录中的字段名称和值
发布时间:2021-03-07 02:28:53 所属栏目:站长百科 来源:网络整理
导读:我有一个进程,它吸取170列的记录作为输入参数(它基于表的布局). 在该进程中,我想挪用一个调试进程,个中一个参数是一个包括该记录的全部字段名称和值的文本字符串. 譬喻: CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%ROWTYPE) as text VARCHA
我有一个进程,它吸取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 on SQL> 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 = 10 DNAME = ACCOUNTING LOC = NEW YORK PL/SQL procedure successfully completed. SQL> 嗯,有点作品(假如这就是你问的谁人).虽然,这只是一个例子,假如你想得到一些很是智慧的对象,你必需修改它(提醒:DATE列). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |