小编pro*_*ean的帖子

在 Oracle 中,如何将 sequence.nextval 保存在变量中以在多个插入中重用?

我正在编写一个脚本来用数据填充一些表以进行测试。

我想写如下内容,但我不知道该怎么做(我是 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;但我希望有一种更简洁的方法来做到这一点。


2011 年 5 月 27 日 15:31

似乎无论如何我都必须在DECLARE块中声明变量。所以我正在尝试

DECLARE
  USER_ID NUMBER(10,0) := …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g

13
推荐指数
4
解决办法
5万
查看次数

为什么在 Oracle 11gR2 中我不能删除创建它的同一用户的物化视图?

我与DI_TEST_AL用户一起创建了一个物化视图,让我们将其命名为MY_MVIEW. 它在USER_OBJECTS表中显示为MATERIALIZED VIEW,我尝试删除它,我收到一条成功消息,但该对象仍然存在。事实上,如果我尝试重新创建它,我会收到“对象已经存在”之类的错误。

我看到有一个同名的表属于另一个模式。我认为这不应该导致问题,但我想提一下。

这是 SQL*Plus 输出:

SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 1 17:01:50 2011

SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';  
OBJECT_NAME OBJECT_TYPE       OWNER
----------- ----------------- ----------
MY_MVIEW    MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW    TABLE             DIDEV11

SQL> DROP MATERIALIZED VIEW MY_MVIEW;
Materialized view dropped.

SQL> select object_name, object_type, owner from all_objects where object_name = 'MY_MVIEW';
OBJECT_NAME OBJECT_TYPE       OWNER
----------- ----------------- ----------
MY_MVIEW    MATERIALIZED VIEW DI_TEST_AL
MY_MVIEW    TABLE …
Run Code Online (Sandbox Code Playgroud)

oracle-11g-r2 materialized-view

12
推荐指数
1
解决办法
2万
查看次数