Oracle:根据表中的值获取列名

时间:2017-01-18 19:22:33

标签: oracle oracle11g columnname

有没有办法根据列的值获取列的名称。

例如

让我们说我有一个名为access的表,它一直只有一行,但是从一个模式到另一个模式不同。此值也可以是0或1)

field0 | field1
---------------
   1    |  0

有没有办法选择列' field0'基于值=' 1'?

我知道我可以使用特定表的代码来完成它,但我想使用oracle查询来完成它。

我唯一的想法是检查

select column_name from ALL_TAB_COLUMNS where TABLE_NAME='table' -- but no way to check for value;

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您的方法不合适,并且有更好的方法来处理您的方案,例如在ACCESS表中使用记录等属性而不是引用业务的列名称。

但是,您可以使用以下方式实现您的方案。

DECLARE
  columnName varchar(128);
  sql_stmt    VARCHAR2(500);
  input1 VARCHAR(20);
  input2 VARCHAR(20);
BEGIN
  input1 := '1';
  input2 := 'schema_Name';
  FOR r IN (select column_name from ALL_TAB_COLUMNS where OWNER = 'DUMMY_TABLE' AND TABLE_NAME='T_PA_CASE' AND DATA_TYPE = 'VARCHAR2') LOOP
  BEGIN
   sql_stmt := 'select ' || r.column_name  || ' from ' || input2 || '.ACCESS WHERE ' || r.column_name || ' = :1';
   EXECUTE IMMEDIATE sql_stmt INTO columnName  USING input1;
   DBMS_OUTPUT.PUT_LINE('First Matched Column is ----'||r.column_name);
   exit;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
    CONTINUE;  
  END;
  END LOOP;
END;
  

输出 - 第一个匹配列名称是   ---- FIELD0

您应将此调整为函数并发送要与之比较的模式名称和值的输入,以获取第一个匹配列名称的输出。