RE: Using SQL Macro Package Vs "Traditional" package
Date: Wed, 6 Nov 2024 18:29:59 -0500
Message-ID: <18f401db30a3$cc756610$65603230$_at_rsiz.com>
Here , I am creating tables and packages under "DBUSER".
create table emp ( eid int , ename varchar2(50) )
insert into emp values ( 100 , 'Zahir Mohideen') ; insert into emp values ( 101 , 'Abdul Hameed') ;
commit;
create or replace package pkg_emp
as
procedure listemp( p_eid int , rfc_emp OUT SYS_REFCURSOR );
end pkg_emp;
/
CREATE OR REPLACE PACKAGE BODY pkg_emp AS
PROCEDURE listemp (
p_eid INT, rfc_emp OUT SYS_REFCURSOR
) AS
BEGIN
OPEN rfc_emp FOR SELECT ename FROM dbuser.emp WHERE eid = p_eid;
END listemp;
END pkg_emp;
/
create or replace package pkg_emp_mac
as
FUNCTION listemp ( p_eid int ) RETURN VARCHAR2 SQL_MACRO ;
end pkg_emp_mac;
/
CREATE OR REPLACE PACKAGE BODY pkg_emp_mac AS
FUNCTION listemp ( p_eid int ) RETURN VARCHAR2 SQL_MACRO IS BEGIN RETURN q'{ Select ename from emp where eid = p_eid }'; END;
END pkg_emp_mac
;
/
grant execute on pkg_emp_mac to rptuser; grant execute on pkg_emp to rptuser;
Here , I am executing package calls as "RPTUSER"
SQL> show user
USER is "RPTUSER"
SQL> var x refcursor;
SQL> exec dbuser.pkg_emp.listemp( 100 , :x);
PL/SQL procedure successfully completed.
SQL> print :x;
ENAME
Zahir Mohideen
SQL> select * from dbuser.pkg_emp_mac.listemp(100); select * from dbuser.pkg_emp_mac.listemp(100)
*ERROR at line 1:
ORA-00942: table or view does not exist
-- http://www.freelists.org/webpage/oracle-lReceived on Thu Nov 07 2024 - 00:29:59 CET