Ich schreibe ein Skript, um einige Tabellen mit Daten zum Testen zu füllen.
Ich würde gerne etwas wie das Folgende schreiben, aber ich weiß nicht, wie ich es machen soll (ich bin Oracle 11g)
SET ENABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE
SET DISABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE
INSERT INTO USERS
(ID, USR_NAME)
VALUES (:ENABLED_USER_ID, 'ANDREW');
INSERT INTO CAR
(CAR_ID, CAR_NAME, USR_ID)
VALUES (CARSEQ.NEXTVAL, 'FORD', :ENABLED_USER_ID);
INSERT INTO USERS
(ID, USR_NAME)
VALUES (:DISABLED_USER_ID, 'ANDREW');
INSERT INTO CAR
(CAR_ID, CAR_NAME, USR_ID)
VALUES (CARSEQ.NEXTVAL, 'FORD', :DISABLED_USER_ID);
Ich weiß, dass ich die Abfragen neu anordnen und die sequence.currval
Referenz verwenden kann, aber ich würde es vorziehen, die ID in ordnungsgemäß benannten Variablen zu speichern.
Vielleicht sollte ich das Drehbuch einfach in eine umhüllen, DECLARE ... BEGIN ... END;
aber ich hoffe, dass es eine präzisere Möglichkeit gibt, dies zu tun.
Ergänzung 27. Mai 2011 15:31
Es scheint, dass ich auf jeden Fall die Variablen in einem DECLARE
Block deklarieren muss . Also versuche ich es mit
DECLARE
USER_ID NUMBER(10,0) := 1;
BEGIN
insert into TEST_USER
values (user_id, 'andrew', sysdate);
END;
aber ich bekomme folgenden fehler
Caused by: java.sql.SQLException: ORA-06550: **line 2, column 27:** PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: * & = - + ; < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset
Das zeigt auf die Variablendeklaration.
Ich verwende Java, um das Skript aus einer Datei zu laden und es mit dem Oracle JDBC-Treiber (ojdbc14-10.2.0.4.0.jar) auf einem Oracle 11g-Server auszuführen.
Die Tabelle TEST_USER wurde mit angelegt
create table TEST_USERS (
id number(10, 0) not null,
name varchar2(100),
date_ins date default sysdate,
primary key (id)
);