I’m trying to run dynamic SQL statements in Oracle and display the combined output, but I keep getting an error. Here’s what I’m working with:
DECLARE
dynamic_query VARCHAR2(2000);
TYPE record_collection IS TABLE OF user_tab_columns%rowtype;
query_results record_collection;
BEGIN
FOR rec IN (
SELECT *
FROM user_tab_columns
WHERE owner = 'SCHEMA_ABC'
AND upper(column_name) LIKE '%FIELD_ABC%'
ORDER BY table_name, column_name
) LOOP
dynamic_query := 'SELECT DISTINCT '
|| rec.column_name
|| ' as field_name '
|| 'FROM '
|| rec.owner
|| '.'
|| rec.table_name
|| ' WHERE SUBSTR('
|| rec.column_name
|| ',1,1) = ''N''';
EXECUTE IMMEDIATE dynamic_query BULK COLLECT INTO query_results;
dbms_output.put_line(query_results);
END LOOP;
END;
The error I’m getting is:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
What I really want is to combine all the query results together like a UNION operation. Any suggestions on how to fix this?