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>
So what is your motivation for trying to do it via macro inclusion?
#1 . I don't want to grant SELECT privs to the table to "rptuser".
Thats the reason , I am encapsulating the SELECT in a package .
#2 . I tried prefix "dbuser"...
On Wed, Nov 6, 2024 at 2:26 PM Sayan Malakshinov <xt.and.r_at_gmail.com> wrote:
On Wed, Nov 6, 2024, 19:14 Zahir Mohideen <zahir.dba_at_gmail.com> wrote:
Here is my test case below.
Am I misunderstanding about the usage of "SQL Macro" package ?
Note: I posted this question to asktom website this morning as well.
SQL> select banner from v$version;
BANNER
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
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