试了 结果如下: as v_sql varchar(255); begin CONNECT sys/sssadmin@sss AS SYSDBA; GRANT create any table TO sssuser;
CONNECT sssuser/sssuser@sss; v_sql:='CREATE TABLE aaa (category_id nvarchar2(20) not null)'; EXECUTE IMMEDIATE v_sql; end; 编译时报错: 行号= 4 列号= 3 错误文本= PLS-00103: 出现符号 "CONNECT"在需要下列之一时: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge <a single-quoted SQL string> pipe 符号 "case在 "CONNECT" 继续之前已插入。 行号= 4 列号= 28 错误文本= PLS-00103: 出现符号 "AS"在需要下列之一时: . ( * @ & = - + < / > at in is mod not rem when <an exponent (**)> <> or != or ~= >= <= <> and or like between ||
不是你那样的 先 CONNECT sys/sssadmin@sss AS SYSDBA; GRANT create any table TO sssuser; 然后 CONNECT sssuser/sssuser@sss; EXECUTE IMMEDIATE v_sql; 不是把下面两句 CONNECT sys/sssadmin@sss AS SYSDBA; GRANT create any table TO sssuser; 放在存储过程
CONNECT sys/sssadmin@sss AS SYSDBA; GRANT create any table TO sssuser; 不是在程序里面,是在sql*plus里面执行。
as
v_sql varchar(255);
begin
CONNECT sys/sssadmin@sss AS SYSDBA;
GRANT create any table TO sssuser;
CONNECT sssuser/sssuser@sss;
v_sql:='CREATE TABLE aaa (category_id nvarchar2(20) not null)';
EXECUTE IMMEDIATE v_sql;
end;
编译时报错:
行号= 4 列号= 3 错误文本= PLS-00103: 出现符号 "CONNECT"在需要下列之一时: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge <a single-quoted SQL string> pipe 符号 "case在 "CONNECT" 继续之前已插入。
行号= 4 列号= 28 错误文本= PLS-00103: 出现符号 "AS"在需要下列之一时: . ( * @ & = - + < / > at in is mod not rem when <an exponent (**)> <> or != or ~= >= <= <> and or like between ||
先
CONNECT sys/sssadmin@sss AS SYSDBA;
GRANT create any table TO sssuser; 然后
CONNECT sssuser/sssuser@sss;
EXECUTE IMMEDIATE v_sql;
不是把下面两句
CONNECT sys/sssadmin@sss AS SYSDBA;
GRANT create any table TO sssuser;
放在存储过程
CONNECT sys/sssadmin@sss AS SYSDBA;
GRANT create any table TO sssuser;
不是在程序里面,是在sql*plus里面执行。
我的存储过程是前台程序在用,不是放在SQLPLUS中执行,那这样的授权语句写在哪??
你已经用sqlplus 命令赋给sssuser见表权限了,所以没有必要再在存储过程中在符权限