SQL> !cat /tmp/x1.sql
set serverout on size 999999
declare
p_query varchar2(32767) := '&1';
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_descTbl dbms_sql.desc_tab;
l_colCnt number;
n number := 0;
procedure p(msg varchar2) is
l varchar2(4000) := msg;
begin
while length(l) > 0 loop
dbms_output.put_line(substr(l,1,80));
l := substr(l,81);
end loop;
end;
begin
execute immediate
'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';
dbms_sql.parse( l_theCursor, p_query, dbms_sql.native );
dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );
for i in 1 .. l_colCnt loop
dbms_sql.define_column(l_theCursor, i, l_columnValue, 4000);
end loop;
l_status := dbms_sql.execute(l_theCursor);
while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
for i in 1 .. l_colCnt loop
dbms_sql.column_value( l_theCursor, i, l_columnValue );
p( rpad( l_descTbl(i).col_name, 30 )
|| ': ' ||
l_columnValue );
end loop;
dbms_output.put_line( '-----------------' );
n := n + 1;
end loop;
if n = 0 then
dbms_output.put_line( chr(10)||'No data found '||chr(10) );
end if;
end;
/
[oracle@vbox tmp]$ sqlplus scott/tiger@freepdb1
SQL*Plus: Release 23.0.0.0.0 - Production on Mon Aug 4 16:13:59 2025
Version 23.8.0.25.04
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Last Successful login time: Mon Aug 04 2025 12:39:29 +08:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
SQL> @/tmp/x1.sql "select * from dept"
old 2: p_query varchar2(32767) := '&1';
new 2: p_query varchar2(32767) := 'select * from dept';
DEPTNO : 10
DNAME : ACCOUNTING
LOC : NEW YORK
-----------------
DEPTNO : 20
DNAME : RESEARCH
LOC : DALLAS
-----------------
DEPTNO : 30
DNAME : SALES
LOC : CHICAGO
-----------------
DEPTNO : 40
DNAME : OPERATIONS
LOC : BOSTON
-----------------
PL/SQL procedure successfully completed.
SQL> @/tmp/x1.sql 'select * from dept'
old 2: p_query varchar2(32767) := '&1';
new 2: p_query varchar2(32767) := 'select * from dept';
DEPTNO : 10
DNAME : ACCOUNTING
LOC : NEW YORK
-----------------
DEPTNO : 20
DNAME : RESEARCH
LOC : DALLAS
-----------------
DEPTNO : 30
DNAME : SALES
LOC : CHICAGO
-----------------
DEPTNO : 40
DNAME : OPERATIONS
LOC : BOSTON
-----------------
PL/SQL procedure successfully completed.
SQL> @/tmp/x1.sql ' select * from dept '
old 2: p_query varchar2(32767) := '&1';
new 2: p_query varchar2(32767) := ' select * from dept ';
DEPTNO : 10
DNAME : ACCOUNTING
LOC : NEW YORK
-----------------
DEPTNO : 20
DNAME : RESEARCH
LOC : DALLAS
-----------------
DEPTNO : 30
DNAME : SALES
LOC : CHICAGO
-----------------
DEPTNO : 40
DNAME : OPERATIONS
LOC : BOSTON
-----------------
PL/SQL procedure successfully completed.
and from scratch
[oracle@vbox tmp]$ sqlplus system/oracle@freepdb1
SQL*Plus: Release 23.0.0.0.0 - Production on Mon Aug 4 16:16:54 2025
Version 23.8.0.25.04
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Last Successful login time: Mon Aug 04 2025 12:40:29 +08:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
SQL> grant db_developer_role to demo_user identified by demo_user;
Grant succeeded.
SQL> conn demo_user/demo_user@freepdb1
Connected.
SQL> @/tmp/x1 "select * from dual"
old 2: p_query varchar2(32767) := '&1';
new 2: p_query varchar2(32767) := 'select * from dual';
DUMMY : X
-----------------
PL/SQL procedure successfully completed.