动态sql建用户的问题

loveyousomuch 2013-08-30 10:37:02
最近在看书,看到动态sql这章,做了个练习,但怎么执行都不过了,请大哥哥们回复
如下:
create or replace procedure dynamicsql as
t_sql varchar2(200);
t_classno varchar(10);
t_stuid varchar(10);
t_infos infos%rowtype;
t_user varchar(20);
t_password varchar(20);

cursor cur_infos is select * from infos;
begin
for t_infos in cur_infos loop
t_stuid:=t_infos.stuid;
t_classno:=t_infos.classno;
t_sql:='create user :1 identified by :2 account unlock';
t_user:=CONCAT(t_stuid,t_classno);
t_password:=CONCAT(t_stuid,t_classno);
dbms_output.put_line(t_user);
execute immediate t_sql using t_user,t_password;

t_sql:='grant :1 to :2';
execute immediate t_sql using 'connect',t_user;
execute immediate t_sql using 'resource',t_user;

end loop;

end;
...全文
145 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveyousomuch 2013-08-30
  • 打赏
  • 举报
回复
知道原因了 create user xx identified by xx 这样的语句中不能使用using参数 改为如下问题解决 t_stuid:=t_infos.stuid; t_classno:=t_infos.classno; t_user:=CONCAT(t_stuid,t_classno); t_password:=CONCAT(t_stuid,t_classno); t_sql:='create user '||t_user||' identified by '||t_user||' account unlock'; dbms_output.put_line(t_user); execute immediate t_sql;-- using 's100102','1001'; t_sql:='grant connect to '||t_user;--||t_user; execute immediate t_sql; t_sql:='grant resource to '||t_user;--||t_user; execute immediate t_sql;
loveyousomuch 2013-08-30
  • 打赏
  • 举报
回复
怎么没人知道么 还是说这个问题太简单了?
loveyousomuch 2013-08-30
  • 打赏
  • 举报
回复
有权限 已经付了权限 t_sql:='create user :1 identified by :2 account unlock';如果改成t_sql:='create user test identified by test account unlock'; s可以成功,但用参数就不行,很奇怪 用户名和密码打印出来是这样的s1001021001
  • 打赏
  • 举报
回复
是不是权限的问题
loveyousomuch 2013-08-30
  • 打赏
  • 举报
回复
执行时execute immediate t_sql using t_user,t_password; 这句报错,ora-01935:缺失的用户或角色名,但dbms_output都是有输出的,也就是说参数是有值的,刚学不太明白

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧