Я хочу сделать выбор из где column_name и table_name должны происходить от курсора - PullRequest
0 голосов
/ 08 мая 2020

Я хочу выбрать column_name из table_name, где column_name.

table_name должно исходить от курсора.

Запрос:

DECLARE
COLUMN_NAME VARCHAR(50); 
TABLE_NAME VARCHAR(100); 
schema_name VARCHAR(100); 
A VARCHAR(100); 
B VARCHAR(100); 

CURSOR col_cursor IS 
  select col.owner as schema_name, 
       col.table_name, 
       col.column_name 
  from sys.all_tab_columns col 
  inner join sys.all_tables t 
    on col.owner = t.owner and 
       col.table_name = t.table_name 
where col.owner = 'PIYUSH1910_BEFORE' 
AND
      DATA_TYPE = 'NUMBER' 
AND
      DATA_PRECISION IS NULL 
AND
      col.TABLE_NAME NOT LIKE '%ER%'; 

BEGIN
 OPEN col_cursor; 

 LOOP
  FETCH col_cursor INTO schema_name,TABLE_NAME,COLUMN_NAME; 
  EXIT WHEN col_cursor%NOTFOUND;
  EXECUTE IMMEDIATE ' SELECT '||COLUMN_NAME ||' INTO A from ' || Table_Name || 'WHERE'||COLUMN_NAME||'- TRUNC('||COLUMN_NAME||',2) > 0'; 

  dbms_output.Put_line(A); 

END LOOP; 
CLOSE col_cursor; 
END

Но это вызывает эту ошибку:

Отчет об ошибке - ORA-00933: SQL команда не завершена должным образом. ORA-06512: в строке 29 00933. 00000 - «SQL команда не завершена должным образом * Причина: * Действие:

Ответы [ 2 ]

2 голосов
/ 08 мая 2020
Предложение

INTO должно быть в конце при использовании EXECUTE IMMEDIATE следующим образом:

EXECUTE IMMEDIATE ' SELECT '||COLUMN_NAME ||' from ' 
        || Table_Name || ' WHERE '||COLUMN_NAME||'- TRUNC('||COLUMN_NAME||',2) > 0' 
        INTO A;

Кроме того, в приведенном выше решении добавляется пробел до и после ключевого слова WHERE.

0 голосов
/ 08 мая 2020

Измените EXECUTE IMMEDIATE на:

EXECUTE IMMEDIATE ' SELECT '|| COLUMN_NAME || ' from ' || Table_Name || 
                  ' WHERE ' || COLUMN_NAME || '- TRUNC('||COLUMN_NAME||',2) > 0'
  INTO A;

Это перемещает предложение INTO в правильную позицию (в данном случае оно является частью EXECUTE IMMEDIATE, а не является частью SELECT) и немного переформатирует код, чтобы имена столбцов были отделены, например, от ключевого слова WHERE.

...