сделать несколько составных запросов в Oracle - PullRequest
1 голос
/ 13 апреля 2010

Как я могу сделать несколько составных запросов в Oracle?

например, это несколько запросов за один шаг?

1

CREATE TABLE test (id NUMBER PRIMARY KEY, name VARCHAR2(30));

2

CREATE SEQUENCE test_sequence START WITH 1 INCREMENT BY 1;

3

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;

4

INSERT INTO test (name) VALUES ('Jon');

5

INSERT INTO test (name) VALUES ('Meloun');

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

Мы решили это, поместив каждый оператор в команду EXECUTE IMMEDIATE внутри сценария PL / SQL:

BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE test (id NUMBER PRIMARY KEY, name VARCHAR2(30))';
  EXECUTE IMMEDIATE 'CREATE SEQUENCE test_sequence START WITH 1 INCREMENT BY 1';
  -- etc
END;
0 голосов
/ 13 апреля 2010

По большому счету операторы DDL должны выполняться по одному. Это правда, что Oracle поддерживает синтаксис CREATE SCHEMA , но это позволяет создавать только несколько таблиц и / или представлений, а также предоставлять им гранты. Он не включает вспомогательные объекты, такие как последовательности или триггеры.

Вы можете превратить две вставки в один оператор, например:

INSERT INTO test (name)
select  'Jon' from dual
union all
select  'Meloun' from dual
/

Это может быть больше проблем, чем стоит, но я предполагаю, что это дает вам простую транзакционность: он вставляет либо все строки, либо ни одну из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...