【发布时间】:2014-10-02 14:14:04
【问题描述】:
我有这个代码。
CREATE TABLE USERS(
USERNAME NVARCHAR2(30),
USER_TYPE VARCHAR2(13)
);
/
CREATE OR REPLACE TYPE OBJ_USER_TYPE IS OBJECT(
USER_TYPE VARCHAR2(13),
USER_LEVEL NUMBER(38, 0)
);
/
CREATE OR REPLACE TYPE OBJ_USER IS OBJECT(
USERNAME NVARCHAR2(30),
USER_TYPE OBJ_USER_TYPE
);
/
CREATE OR REPLACE TYPE NST_USERS IS TABLE OF OBJ_USER;
/
DECLARE
objUser OBJ_USER NOT NULL DEFAULT OBJ_USER('MARION', OBJ_USER_TYPE('USER', 3));
tblUSERS NST_USERS NOT NULL DEFAULT NST_USERS(objUser);
BEGIN
INSERT INTO USERS(USERNAME, USER_TYPE)
SELECT USERNAME, USER_TYPE.USER_TYPE
FROM TABLE(tblUSERS);
END;
/
它会引发“无效标识符”错误,就像here。
但是当我使用时:
INSERT INTO USERS(USERNAME, USER_TYPE)
SELECT USERNAME, TREAT(USER_TYPE AS OBJ_USER_TYPE).USER_TYPE
FROM TABLE(tblUSERS);
它引发了“值过多”错误。
这段代码有什么问题?
【问题讨论】:
-
你能告诉我们
USERS表的描述还输入NST_USERS吗? -
@MaheswaranRavisankar 我在编辑中显示了我的用户信息。
-
不相关但:你不需要
;和非PL/SQL块的/:stackoverflow.com/a/10207695/330315create ... type ...;/将实际运行该语句两次 -
@a_horse_with_no_name 但创建类型需要它。与其他 DDL 不同。
-
@MaheswaranRavisankar:你是对的。我想写
create table:)