2014-12-02 5 views
0

У меня есть следующий SQL-код для создания и заполнения нескольких таблиц в Дерби:Использование select в INSERT в Derby SQL

CREATE TABLE GROUPS (
    GRP_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY, 
    GRP_NAME VARCHAR(256) NOT NULL, 
    DISPLAY_NAME VARCHAR(256)); 

CREATE TABLE USERS (
    USR_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY, 
    USR_NAME VARCHAR(256) NOT NULL, 
    PASSWORD VARCHAR(512) NOT NULL, 
    DISPLAY_NAME VARCHAR(256)); 

CREATE TABLE USR_GRP_MEMBERSHIP (
    USR_ID INTEGER NOT NULL REFERENCES USERS ON DELETE CASCADE, 
    GRP_ID INTEGER NOT NULL REFERENCES GROUPS ON DELETE CASCADE, 
    CONSTRAINT USR_ID_GRP_ID UNIQUE (USR_ID, GRP_ID)); 

INSERT INTO GROUPS(GRP_NAME, DISPLAY_NAME) VALUES('Users', 'Users'); 
INSERT INTO GROUPS(GRP_NAME, DISPLAY_NAME) VALUES('AdminUsers', 'Administrators'); 
INSERT INTO USERS(USR_NAME, PASSWORD, DISPLAY_NAME) VALUES('user', 'userpwd', 'User'); 
INSERT INTO USERS(USR_NAME, PASSWORD, DISPLAY_NAME) VALUES('admin', 'adminpawd', 'Administrator'); 

#The following code populates the USR_GRP_MEMBERSHIP table using the IDs of users 
#& groups inserted in the previous set of insert statements 

INSERT INTO USR_GRP_MEMBERSHIP VALUES((SELECT USR_ID FROM USERS WHERE USR_NAME = 'user'), (SELECT GRP_ID FROM GROUPS WHERE GRP_NAME = 'Users')); 
INSERT INTO USR_GRP_MEMBERSHIP VALUES((SELECT USR_ID FROM USERS WHERE USR_NAME = 'admin'), (SELECT GRP_ID FROM GROUPS WHERE GRP_NAME = 'Users')); 
INSERT INTO USR_GRP_MEMBERSHIP VALUES((SELECT USR_ID FROM USERS WHERE USR_NAME = 'admin'), (SELECT GRP_ID FROM GROUPS WHERE GRP_NAME = 'AdminUsers')); 

Мой Вопрос: Последние 3 INSERT заявления имеют SELECT заявления повторения в них. Как сохранить вывод этих операторов SELECT в переменной и использовать их в этих операциях 3 INSERT?

ответ

0

Один из способов добиться этого - использовать заполнители в подготовленных операциях?

Вот хорошая отправная точка: https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Ваше заявление будет выглядеть примерно так:

INSERT INTO USR_GRP_MEMBERSHIP 
VALUES ((SELECT USR_ID FROM USERS WHERE USR_NAME = ?), 
     (SELECT GRP_ID FROM GROUPS WHERE GRP_NAME = ?)); 

и вы должны заменить заполнители «пользователя»/«Пользователи», «админ» /» Users ',' admin '/' AdminUsers 'во время выполнения, используя SetString (дважды), а затем ExecuteUpdate для каждой пары.

+0

Да, это может быть сделано, но это будет в коде JAVA, я ищу способ сделать это в самом коде SQL! :) – Curious

Смежные вопросы