下面是函数中使用游标的关键语句,赋于不同的脚本执行情况不一样,怎么会这样?难道跨数据库不支持?: v_sql varchar2(1000);
c1 integer; v_sql:=‘select * from table’;--一切正常;
v_sql:=‘select * from Test.table’;--再表名前加别的库名作前缀,parse时报错;提示表不存在; c1 := dbms_sql.open_cursor;
dbms_sql.parse(c1, v_sql, dbms_sql.native);
c1 integer; v_sql:=‘select * from table’;--一切正常;
v_sql:=‘select * from Test.table’;--再表名前加别的库名作前缀,parse时报错;提示表不存在; c1 := dbms_sql.open_cursor;
dbms_sql.parse(c1, v_sql, dbms_sql.native);
解决方案 »
- !!!根据输入参数返回分区名称!!!
- 有对ORACLE递归熟悉的么?
- 大家看看这个sql怎么写?
- /usr/bin/ld: cannot find -ltcl
- 能解决的,就是大虾,数据库批处理问题,走过路过进来看看!~
- 请教一下,如何修改用户名?
- ORACLE 中出现错误ORA-0100:超出打开游标的最大数,我应如何增加打开游标的最大数.谢谢
- 为什么我登录到Oracle Management Server时老出错。(oracle 9i)
- 有关managerserver启动的问题!(50)
- 使用mybatis框架进行动态编写sql插入语句时报错--违反主键唯一约束
- 【100分在线等】求解一个简单的题
- 新手求救~~oralce可以建单机服务器吗?
给你的当前用户授权访问test用户的table表就可以了。
创建同义词的具体语法是:
create [public] SYNONYM synooym for object;
其中synooym表示要创建的同义词的名称,object表示表,视图,序列等我们要创建同义词的对象的名称。如:
CREATE PUBLIC SYNONYM public_emp FOR jward.emp; -- jward 用户名
经过验证,建立DBLINK、当前用户已具备sysdba、dba权限、建立同义词三种方式下,提示一样的错误,还是表或视图不存在;
不用游标,单纯查询 “select * from Test@dblinktmp”、“select * from Test.table”、“select * from public_Test”都是没问题的;难道是dbms_sql.parse检索脚本时根本不考虑跨数据库的各种情况,而只负责本用户下的对象么?
在同一个Database里面不需要建什么DBlink,只需要你的存储过程具有访问别的用户(schema)的权限,
也就是说,问题在于你执行存储过程的用户所具有的权限(注意不是角色,角色权限不能应用于存储过程)
以楼主的问题为例,想要在存储过程中没有限制的select任何一个schema的表,
存储过程所属的用户必须要具有:select any table的权限。
具体授权方法:grant select any table to userid;