Oracle 如何从参数(游标、varchar2等)中进行选择

Oracle 如何从参数(游标、varchar2等)中进行选择,oracle,select,Oracle,Select,我有点小问题,如果你能帮我,那就太好了 DECLARE CURSOR cur1 IS SELECT table_name FROM all_tab_columns WHERE column_name LIKE 'DESCRIPTION'; tableName varchar2(100); BEGIN OPEN cur1; LOOP FETCH cur1 INTO ta

我有点小问题,如果你能帮我,那就太好了

DECLARE
      CURSOR cur1 IS 
         SELECT table_name 
           FROM all_tab_columns 
          WHERE column_name LIKE 'DESCRIPTION';
      tableName varchar2(100);
BEGIN
      OPEN cur1;
      LOOP
        FETCH cur1 INTO tableName;
        EXIT WHEN cur1%NOTFOUND;
        dbms_output.put_line(tablename);
      END LOOP;
END;
我需要的是从具有以下条件的表中获取所有可能的信息:

WEHRE DESCRIPTION LIKE 'Transaction%'  
像这样的

SELECT *
  FROM tableName ---- from above
 WEHRE DESCRIPTION LIKE 'Transaction%'
我想从游标中的表中选择所有数据

这些表的结构不同,一个表可以有4个列,一个表可以有10个列

可以在匿名块中完成吗? 有人能帮我吗?

试试这个:

DECLARE
      CURSOR cur1 IS 
         SELECT table_name 
           FROM user_tab_columns 
          WHERE column_name LIKE 'DESCRIPTION';
      tableName varchar2(100);
      l_description varchar2(100);
      l_str_val varchar2(100) := 'Transaction%';
      l_cursor sys_refursor;
BEGIN
      OPEN cur1;
      LOOP
        FETCH cur1 INTO tableName;
        EXIT WHEN cur1%NOTFOUND;
        open l_cursor for 'select DESCRIPTION from ' || tableName || ' where DESCRIPTION like :description' using l_str_val;
        loop
          fetch l_cursor into l_description; 
          exit when l_cursor%NOTFOUND;
          dbms_output.put_line(tablename || '  ' || l_description);
        end loop;
        close l_cursor;
      END LOOP;
      close cur1;
END;
我只提取了description列,因为我确信该列在表中,如果要提取更多列,必须重写如下内容:

WHERE column_name = ('DESCRIPTION', 'ID', NAME)
然后:

execute immediate 'select DESCRIPTION, ID, NAME from ' || tableName || ' where DESCRIPTION like :description' into l_description, l_id, l_name using l_str_val;

您可以使用动态SQL生成
SELECT
,但是您想如何处理从每个表中选择的行?我只想显示它们。假设我的描述是“Transaction”,在我的第一个表中找不到该描述,但在下面3个表中找到了它。此脚本关闭是因为第一个表上的select没有返回数据,而关闭的错误是ORA-01403:找不到数据。我可以路过这里吗?关闭后,脚本不会从第二、第三或第N个表中选择。现在检查我的答案,我忘记了如何关闭光标。