【发布时间】:2016-04-21 14:51:40
【问题描述】:
我正在使用 Oracle Database 11g、PL/SQL 和 SQL 开发人员。
这看起来很简单,但它似乎不像我想的那样工作......
假设我有一些任意的映射表,比如:
+--------+--------+
| Letter | Color |
+--------+--------+
| N | Yellow |
+--------+--------+
| P | Orange |
+--------+--------+
| Q | Violet |
+--------+--------+
| A | Green |
+--------+--------+
| C | Blue |
+--------+--------+
| F | Red |
+--------+--------+
我创建了一个空白的日志记录表,以跟踪此映射表随时间的变化。
目前这个日志表是空的,我想用数据初始化它,让它看起来像这样:
+-----+------+-------+--------+--------+
| RID | blah | blahh | Letter | Color |
+-----+------+-------+--------+--------+
| 1 | | | N | Yellow |
+-----+------+-------+--------+--------+
| 2 | | | P | Orange |
+-----+------+-------+--------+--------+
| 3 | | | Q | Violet |
+-----+------+-------+--------+--------+
| 4 | | | A | Green |
+-----+------+-------+--------+--------+
| 5 | | | C | Blue |
+-----+------+-------+--------+--------+
| 6 | | | F | Red |
+-----+------+-------+--------+--------+
我知道我能做到:
INSERT INTO my_logging_table(LETTER, COLOR)
SELECT letter, color FROM my_mapping_table;
但是如果 RID 是一个不可为空的值,那么我需要将它插入到选定的颜色/字母值旁边怎么办? (比如说,我不能只是放弃约束)
这样的事情给了我ORA-00926: missing VALUES keyword
INSERT INTO my_logging_table(rid, letter, color)
mysequence.nextval, SELECT letter, color, FROM my_mapping_table;
这给了我ORA-00947: Not enough values
insert into my_logging_table(rid, letter, color)
values mySequence.nextval, select letter, color from my_mapping_table;
最后这个方法给了我:ORA-02287: sequence number not allowed here:
insert into my_logging_table(rid, letter, color)
select mySequence.nextval, letter, color from my_mapping_table;
这样做的正确方法是什么?
基本上,我如何进行包含一些选定值和一些静态或序列值的插入?
【问题讨论】:
-
第三种方法应该有效。
-
描述日志表
-
第三种(最终)方法应该有效。您是否运行
select mySequence.nextval from dual;来检查您的序列是否已启动?