对于dbms_sql的执行权限问题之一中的两个问题:
1.到底是需要什么权限才能执行函数(过程)中的dbms_sql呢?
2.在利用JDBC连接Oracle时使用的用户名为system登录时有没有sysdba的权限呢?
首先2在《JDBC以sysdba身份连接oracle9i?》中已经解决:JDBC thin连接时使用system只能是以normal登录,不能作为sysdba登录。
再看1,到底是什么权限才能在函数或过程执行dbms_sql呢?
在Oracle Enterprise Manager Console中以sys登录可以看到system虽然有DBA角色,但是其被显示授予的系统权限只有UNLIMITED TABLESPACE.在该界面中增加授权create any view或者在sql*plus中sys登录使用如下语句
再执行
成功! 可见需要根据dbms_sql中调用的sql语句相应地显示授权给user才能执行。
1.到底是需要什么权限才能执行函数(过程)中的dbms_sql呢?
2.在利用JDBC连接Oracle时使用的用户名为system登录时有没有sysdba的权限呢?
首先2在《JDBC以sysdba身份连接oracle9i?》中已经解决:JDBC thin连接时使用system只能是以normal登录,不能作为sysdba登录。
再看1,到底是什么权限才能在函数或过程执行dbms_sql呢?
在Oracle Enterprise Manager Console中以sys登录可以看到system虽然有DBA角色,但是其被显示授予的系统权限只有UNLIMITED TABLESPACE.在该界面中增加授权create any view或者在sql*plus中sys登录使用如下语句
SQL>
grant
create
any
view
to system;
CallableStatement cs;
try {
cs = con.prepareCall( "{?=call system.fun_create_join_view(?,?,?)}");
cs.registerOutParameter(1, Types.VARCHAR);
cs.setString(2, viewName);
cs.setString(3, name1);
cs.setString(4, name2);
cs.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
cs = con.prepareCall( "{?=call system.fun_create_join_view(?,?,?)}");
cs.registerOutParameter(1, Types.VARCHAR);
cs.setString(2, viewName);
cs.setString(3, name1);
cs.setString(4, name2);
cs.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
转载于:https://blog.51cto.com/dongdong1314/209711