我有一张桌子:
create table NHAN_VIEN (
Ma_nhan_vien varchar2(5) not null,
Ma_thu_vien char(3),
Loai_nhan_vien char(3) not null,
...
primary key (Ma_nhan_vien),
constraint fk_NV_TV
foreign key (Ma_thu_vien)
references THU_VIEN(Ma_thu_vien),
constraint fk_NV_LN
foreign key (Loai_nhan_vien)
references LOAI_NHAN_VIEN(Ma_loai_nhan_vien)
);
和程序:
CREATE OR REPLACE PROCEDURE HW31_CREATEUSER
AS
CURSOR CUR IS (SELECT Ma_nhan_vien
FROM NHAN_VIEN
WHERE UPPER(Ma_nhan_vien) NOT IN (SELECT USERNAME
FROM ALL_USERS));
STRSQL VARCHAR(2000);
USR VARCHAR2(5);
BEGIN
OPEN CUR;
STRSQL := 'ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE';
EXECUTE IMMEDIATE(STRSQL);
LOOP
FETCH CUR INTO USR;
EXIT WHEN CUR%NOTFOUND;
STRSQL := 'CREATE USER '||USR||' IDENTIFIED BY '||USR;
EXECUTE IMMEDIATE(STRSQL); -- These didn't work
STRSQL := 'GRANT CONNECT TO '||USR;
EXECUTE IMMEDIATE(STRSQL); -- These didn't work
END LOOP;
STRSQL := 'ALTER SESSION SET "_ORACLE_SCRIPT" = FALSE';
EXECUTE IMMEDIATE(STRSQL);
CLOSE CUR;
END;
我的意思是在 NHAN_VIEN 表中创建每个用户。 但是当我执行 HW31_CREATEUSER 时,我的 sqldeveloper 说:
BEGIN HW31_CREATEUSER; END;
Error report -
ORA-00922: missing or invalid option
ORA-06512: at "SYS.HW31_CREATEUSER", line 18
ORA-06512: at line 1
00922. 00000 - "missing or invalid option"
如果删除
EXECUTE IMMEDIATE(STRSQL);
,我可以运行我的程序
如果有任何不清楚的地方请告诉我
您需要在相关属性(用户/密码)周围加上引号,否则您很容易因为 NHAN_VIEN 源中的数据而遇到此错误,例如
SQL> create user demo1 identified by abc; -- abc is OK
User created.
SQL> create user demo2 identified by 9abc; -- 9abc is not
create user demo2 identified by 9abc
*
ERROR at line 1:
ORA-00922: missing or invalid option
SQL> create user demo2 identified by "9abc"; -- quotes to fix
User created.