Oracle PL/SQL 变量记录字段名称

标签 oracle variables plsql record

我对游标中的动态字段名称有疑问。这有点难以解释,但我会尝试...

有3张表:

  1. T_IN: I don't know anything about this table yet. No structure, no field names, simply nothing.

  2. T_OUT: this is the the target table

  3. T_KONF: This table has 2 columns:

    C_IN VarChar2: this column contains the field names of the table T_IN

    C_OUT VarChar2: this column contains the field names of the table T_OUT

表 T_KONF 告诉我,表 T_IN 的哪个字段中的哪些数据必须放在表 T_OUT 的哪个字段中。

现在我有一个记录

MyRec C_OUT%ROWTYPE;

和一个包含字段名的变量

field_name VarChar2(15) := 'PRODUCT';

如何给记录的这个字段赋值?硬编码它看起来像这样:

MyRec.PRODUCT := value;

但是有没有办法动态地做到这一点?

MyRec.[field_name] := value; -- ???

我希望这足够具体...谢谢

最佳答案

您不能动态分配记录字段。

你可以使用 INDEX-BY PL/SQL Table (associative array)但它的类型必须事先知道。您可以使用包含所有专业类型的动态 RECORD,并且可以在运行时决定使用哪个字段(VARCHAR2、DATE...),但这会相当乏味。

相反,我建议您使用动态 SQL,因为您在运行时知道所有列名,并且我们可以假设列类型是兼容的。

像这样的东西应该可以工作(11gR2):

-- SETUP
-- CREATE TABLE T_KONF(C_IN VARCHAR2(30), C_OUT VARCHAR2(30));
-- INSERT INTO T_KONF VALUES ('C1', 'C2');
-- INSERT INTO T_KONF VALUES ('C2', 'C3');

SQL> DECLARE
  2     l_sql LONG;
  3  BEGIN
  4     SELECT 'INSERT INTO t_out (' ||
  5               listagg(dbms_assert.simple_sql_name('"'||t_konf.c_out||'"'),
  6                      ', ') WITHIN GROUP (ORDER BY t_konf.rowid)
  7            || ' )
  8             SELECT ' ||
  9               listagg(dbms_assert.simple_sql_name('"'||t_konf.c_in||'"'),
 10                       ', ') WITHIN GROUP (ORDER BY t_konf.rowid)
 11            || '
 12               FROM t_in
 13              WHERE 1 = 1' -- custom where clause
 14       INTO l_sql
 15       FROM t_konf;
 16     DBMS_OUTPUT.put_line(l_sql);
 17     -- EXECUTE IMMEDIATE (l_sql); -- uncomment when SQL is OK
 18  END;
 19  /

INSERT INTO t_out ("C3", "C2" )
           SELECT "C2", "C1"
             FROM t_in
            WHERE 1 = 1

关于Oracle PL/SQL 变量记录字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287038/

相关文章:

oracle - 将 Oracle 表移动到索引组织

按下 'enter' 时 Oracle Apex 提交

javascript - jQuery 变量结果为 "undefined",即使是全局的

c - 声明 : K&R

java - AES 加密 Java/plsql

oracle - PL/SQL错误: PLS-00103: Encountered the symbol “EXCEPTION”

java - 使用 Oracle SQL 结果集填充 Java swing JComboBox

sql - 优化where子句SQL

shell - 变量值加1(shell编程)

oracle - PLSQL 流水线函数返回列表