有没有办法根据列的值获取列的名称。
例如
让我们说我有一个名为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;
非常感谢任何建议。
答案 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
您应将此调整为函数并发送要与之比较的模式名称和值的输入,以获取第一个匹配列名称的输出。