Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Replace an User function with Sql Statement
Hi,
I have the following Sql which uses a function (check_user_priv) . How do I replace the function with ordinary Sql Statement? Thanks Sam
SELECT DISTINCT a.owner||'.'||a.table_name FROM dcw_column a WHERE a.update_field_ind = 'Y' AND
( exists (SELECT null FROM all_tab_privs tp WHERE table_schema = a.owner AND table_name = a.table_name AND privilege = 'UPDATE' AND (grantee = 'ASKHELP' or grantee in (SELECT role FROM session_roles)) ) OR exists (SELECT null FROM all_col_privs WHERE table_schema = a.owner AND table_name = a.table_name AND column_name = a.column_name AND privilege = 'UPDATE' AND (grantee = 'ASKHELP' or grantee in (SELECT role FROM session_roles)) ) OR exists (SELECT null FROM user_tables WHERE table_name = a.table_name) OR exists (SELECT null FROM user_views WHERE view_name = a.table_name) )
ORDER BY a.owner||'.'||a.table_name
Create or replace function check_user_priv (user_name_p varchar2 ,owner_name_p varchar2, table_name_p varchar2 ,column_name_p varchar2 ,privilegeType_p varchar2) return varchar2 is
tmp_priv varchar2 (1);
tmp_user_id varchar2(40);
begin
-- Check whether a record exists for an current user
select
case when privilegeType_p ='SELECT' then NVL
(SELECT_FIELD_IND,'Y')
when privilegeType_p ='INSERT' THEN INSERT_FIELD_IND when privilegeType_p ='UPDATE' THEN UPDATE_FIELD_IND when privilegeType_p ='DELETE' THEN UPDATE_FIELD_IND end, user_id into tmp_priv,tmp_user_id from dcw_column_user_priv up where up.owner = owner_name_p and up.table_name = table_name_p and up.column_name = column_name_p and user_id = user_name_p; return tmp_priv; exception when no_data_found then -- Check whether a record exists for any user. -- If a record exists do not allow the current user to view this column. begin select case when privilegeType_p ='SELECT' then NVL
(SELECT_FIELD_IND,'Y')
when privilegeType_p ='INSERT' THEN INSERT_FIELD_IND when privilegeType_p ='UPDATE' THEN UPDATE_FIELD_IND when privilegeType_p ='DELETE' THEN UPDATE_FIELD_IND end, user_id into tmp_priv,tmp_user_id from dcw_column_user_priv up where up.owner = owner_name_p and up.table_name = table_name_p and up.column_name = column_name_p; return ('N'); exception -- If there is no record, allow the current user to access based on table privilege when others then return ('Y'); end;
![]() |
![]() |