pro*_*ean 13 oracle oracle-11g
我正在编写一个脚本来用数据填充一些表以进行测试。
我想写如下内容,但我不知道该怎么做(我是 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);
Run Code Online (Sandbox Code Playgroud)
我知道我可以重新排列查询并使用sequence.currval
引用,但我更喜欢将 id 保存在正确命名的变量中。
也许我应该将脚本包装在 a 中,DECLARE ... BEGIN ... END;
但我希望有一种更简洁的方法来做到这一点。
似乎无论如何我都必须在DECLARE
块中声明变量。所以我正在尝试
DECLARE
USER_ID NUMBER(10,0) := 1;
BEGIN
insert into TEST_USER
values (user_id, 'andrew', sysdate);
END;
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
Run Code Online (Sandbox Code Playgroud)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
那指向变量声明。
我正在使用 java 从文件加载脚本并在 Oracle 11g 服务器上使用 Oracle JDBC 驱动程序 (ojdbc14-10.2.0.4.0.jar) 运行它。
表 TEST_USER 已创建
create table TEST_USERS (
id number(10, 0) not null,
name varchar2(100),
date_ins date default sysdate,
primary key (id)
);
Run Code Online (Sandbox Code Playgroud)
ber*_*d_k 11
我认为它是这样的
DECLARE
ENABLED_USER_ID PLS_INTEGER;
DISABLED_USER_ID PLS_INTEGER;
BEGIN
ENABLED_USER_ID := SEQ.NEXTVAL;
DISABLED_USER_ID := SEQ.NEXTVAL;
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);
END;
/
Run Code Online (Sandbox Code Playgroud)
如果要声明变量,则需要一个块
在 11g 中,对序列的支持得到了改进,因此您可以像这样使用它们:
ENABLED_USER_ID := SEQ.NEXTVAL;
Run Code Online (Sandbox Code Playgroud)
而不是使用select
语句(尽管两者都可以)
保留值的其他选项包括将它们保存到表或创建上下文,但我认为sequence.currval
这里确实是“正确答案”
归档时间: |
|
查看次数: |
47783 次 |
最近记录: |