У меня есть этот код.
INSERT SELECT с объектом столбца SELECT
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: http://stackoverflow.com/a/10207695/330315 'create ... type .. .;/'будет фактически запускать этот оператор * дважды * –