现有一个数据库,创建了两个用户user1,user2。每个用户都给了dba权限,在每个用户都建了相同的表如tbl_user
通过以下sql查询该表的列名,将列名以逗号分隔显示 SELECT SUBSTR(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','), 2) str
FROM (SELECT COLUMN_NAME,
ROW_NUMBER() OVER(ORDER BY COLUMN_NAME) rn,
COUNT(*) OVER() cnt
FROM all_tab_columns
where TABLE_NAME = upper('tbl_user'))
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;奇怪的是直接用pl/sql developer的sql窗口查询和将该sql放到存储过程中查询的结果不同!在sql窗口中查询的时候出现了重复的列名,即将数据库中两个用户下的表的列名给查了出来;
在存储过程中查询的列名没有重复!!
望各位老大赐教。
通过以下sql查询该表的列名,将列名以逗号分隔显示 SELECT SUBSTR(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','), 2) str
FROM (SELECT COLUMN_NAME,
ROW_NUMBER() OVER(ORDER BY COLUMN_NAME) rn,
COUNT(*) OVER() cnt
FROM all_tab_columns
where TABLE_NAME = upper('tbl_user'))
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;奇怪的是直接用pl/sql developer的sql窗口查询和将该sql放到存储过程中查询的结果不同!在sql窗口中查询的时候出现了重复的列名,即将数据库中两个用户下的表的列名给查了出来;
在存储过程中查询的列名没有重复!!
望各位老大赐教。
因为oracle在存储过程中对权限控制更严,从角色继承的权限无效。
也就是说,user1虽然有DBA权限,但是在存储过程中也无法访问user2的table,所以查询all_tab_columns的时候也不会返回user2的表格的列。
grant select on user2.tablexxx to user1;