Tôi đang viết một tập lệnh để điền vào một số bảng dữ liệu để thử nghiệm.
Tôi muốn viết một cái gì đó như sau nhưng tôi không biết làm thế nào (Tôi là 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);
Tôi biết tôi có thể sắp xếp lại các truy vấn và sử dụng sequence.currval
tham chiếu, nhưng tôi muốn có id được lưu trong các biến được đặt tên đúng.
Có lẽ tôi chỉ nên bọc kịch bản trong một DECLARE ... BEGIN ... END;
nhưng tôi hy vọng có một cách ngắn gọn hơn để làm nó.
Bổ sung 27 tháng 5 năm 2011 15:31
Dường như trong mọi trường hợp tôi phải khai báo các biến trong một DECLARE
khối. Vì vậy, tôi đang cố gắng với
DECLARE
USER_ID NUMBER(10,0) := 1;
BEGIN
insert into TEST_USER
values (user_id, 'andrew', sysdate);
END;
nhưng tôi nhận được lỗi sau
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
Điều đó chỉ ra khai báo biến.
Tôi đang sử dụng java để tải tập lệnh từ một tệp và chạy nó bằng trình điều khiển JDBC của Oracle (ojdbc14-10.2.0.4.0.jar) trên máy chủ Oracle 11g.
Bảng TEST_USER đã được tạo bằng
create table TEST_USERS (
id number(10, 0) not null,
name varchar2(100),
date_ins date default sysdate,
primary key (id)
);