【发布时间】:2021-02-08 15:37:10
【问题描述】:
我有一个表列表,我需要根据列名传递这些表。
例如,如果我的表有 CLASSID,它将进入块 2,如果表有 OBJID,它将进入块 1,如果表有 KOPPKT,它将进入块 3,但是如果任何表同时具有 CLASSID 和 OBJID,它应该进入块2 不是块 1。
同样,如果任何表有 KOPPKT 和 OBJID,它应该去块 1 而不是块 3。在这里我面临将表发送到正确块的问题。
我试图实现但没有得到所需输出的代码。
desc TABLE1;
Name Null Type
------- -------- ----------
CLASSID NOT NULL NUMBER(10)
KOPPKT NOT NULL NUMBER(10)
ID NOT NULL NUMBER(10)
desc TABLE2;
Name Null Type
------- -------- ----------
CLASSID NOT NULL NUMBER(10)
OBJID NOT NULL NUMBER(10)
desc TABLE3;
Name Null Type
------- -------- ----------
KOPPKT NOT NULL NUMBER(10)
OBJID NOT NULL NUMBER(10)
这里 Table1 和 table2 应该去块 2,因为它有 CLASSID,table3 应该去块 1,因为它有 OBJID
set serveroutput on
declare
v_exporttable VARCHAR2(100):='TABLE1';
v_name varchar2(100);
begin
FOR rec IN
(
select distinct column_name from all_tab_cols
where table_name = v_exporttable
) loop
if (rec.column_name ='OBJID') then
DBMS_OUTPUT.PUT_LINE('Table has OBJID'); /* block 1 */
elsif (rec.column_name ='CLASSID') then
DBMS_OUTPUT.PUT_LINE('Table has Classid'); /* block 2 */
elsif (rec.column_name = 'KOPPKT') then
DBMS_OUTPUT.PUT_LINE('Table has KOPPKT'); /* block 3 */
end if;
end loop;
end;
/
传递 Table1 我得到的第一个输出。这意味着它同时通过块 2 和块 3。但我只想通过块 2
PL/SQL procedure successfully completed.
Table has Classid
Table has KOPPKT
同样,如果我通过表 2,我就会得到这个。这意味着它同时通过块 1 和块 2。但我只想通过块 2
PL/SQL procedure successfully completed.
Table has OBJID
Table has CLASSID
同样,如果我通过了表 3,我就会得到这个。这意味着它同时通过块 1 和块 3。但我只想通过块 2
PL/SQL procedure successfully completed.
Table has OBJID
Table has KOPPKT
我已经尝试过以下情况,但仍然无法正常工作
(rec.column_name ='OBJID' and rec.column_name <>'CLASSID')
【问题讨论】:
标签: sql oracle plsql oracle11g oracle-sqldeveloper