我是oracle的新手,来自MySQL,我试图通过序列和触发器使autoincrement在Oracle中工作,以便每次执行插入操作时,它都会使字段增加1。
CREATE SEQUENCE proposals_seq MINVALUE 1
START WITH 1 INCREMENT BY 1 CACHE 10;
CREATE OR REPLACE TRIGGER proposals_before_insert
BEFORE INSERT
ON proposals
FOR EACH ROW
BEGIN
SELECT proposals_seq.nextval INTO :new.proposal_id FROM dual;
END;
但是,当我运行脚本时,出现错误:
Error code 900, SQL state 42000: ORA-00900: invalid SQL statement
如果我删除“;” 在select语句之后,我没有任何错误,直到尝试将数据插入表中,然后才出现此错误:
INSERT INTO proposals (target_audience, line_of_business, activity_description, cost, comments, objectives_and_results)
VALUES ('test', 'test', 'test', 15, 'test', 'test');
Error code 4098, SQL state 42000: ORA-04098: trigger 'PROPOSALS_BEFORE_INSERT' is invalid and failed re-validation
我正在使用以下版本的Oracle:Oracle数据库11g企业版11.2.0.1.0版-64位生产
我发现的所有文章似乎都是这样做的,并且在这里也给出了答案:如何在Oracle上使用AUTO_INCREMENT创建ID?
可能是因为我使用的是Oracle版本吗?我还有另一种方法可以自动增加此值吗?还是我必须按照我的sql中的顺序手动增加?
我的桌子看起来像这样:
CREATE TABLE proposals (
proposal_id INT NOT NULL,
target_audience VARCHAR2(50) NOT NULL,
line_of_business VARCHAR2(50),
activity_description VARCHAR2(250) NOT NULL,
cost DECIMAL(19, 4) NOT NULL,
comments VARCHAR2(250),
objectives_and_results VARCHAR2(250),
PRIMARY KEY (proposal_id)
);
我怀疑问题在于您的客户端工具正在读取每个分号作为命令的结尾,从而导致PL / SQL代码(需要分号作为语句终止符)被错误地传输到服务器。
当您删除分号时,该语句已正确发送到服务器,但是由于PL / SQL错误,您最终将获得无效的对象。
我在SQL Fiddle上重复了您的问题。然后,我将语句终止符更改为/
,;
然后将代码更改为使用斜杠html" target="_blank">执行每个语句,并且它的工作没有错误:
CREATE TABLE proposals (
proposal_id INT NOT NULL,
target_audience VARCHAR2(50) NOT NULL,
line_of_business VARCHAR2(50),
activity_description VARCHAR2(250) NOT NULL,
cost NUMBER(19, 4),
comments VARCHAR2(250),
objectives_and_results VARCHAR2(250),
PRIMARY KEY (proposal_id)
)
/
CREATE SEQUENCE proposals_seq MINVALUE 1
START WITH 1 INCREMENT BY 1 CACHE 10
/
CREATE OR REPLACE TRIGGER proposals_before_insert
BEFORE INSERT ON proposals FOR EACH ROW
BEGIN
select proposals_seq.nextval into :new.proposal_id from dual;
END;
/
问题内容: 我现在正在一家公司中使用全球DBA的无限智慧,他创建了一个表,该表将一个int用作ID字段,但是不会自动递增该数字。 我要从.Net传递一个表值参数,因为它随时有大约100或更多行的数据正在传递,并且我不想杀死该应用程序,破坏网络或SQL Server。 这是我的存储过程 我希望这会为我带来一些帮助,就像我对此进行测试时一样 这就是我回来的 (影响1行) (影响1行) (影响1行) (
问题内容: 我创建了下表,但出现错误; “ AUTO_INCREMENT”附近的语法不正确。 的SQL 我想我做对了所有事情。有人可以帮我吗? 问题答案: 它不在SQL Server中。 尝试以下方法:
当我从我之前的文章“使用Oracle将三个表与PIVOT结合起来”中的代码,并在SQL开发人员中点击“运行脚本”时,一切都非常完美,但是当我试图从PHP文件中执行相同的脚本时,我得到了“ORA-00900无效的SQL语句”-错误。SQL开发人员“运行语句”也无法执行代码。我的代码似乎不在“SQL语句”语法中? 用于将sql脚本放入变量的PHP代码: 然后我将$sql变量传递给函数以获得结果: 那么
问题内容: 嗨,我想使用Java在mongodb中自动递增。我对此完全陌生。在文档中,我找到了这样的解决方案: 谁能建议我如何使用Java做到这一点?我对此完全陌生。 问题答案: 首先使用“ 创建自动递增序列字段”,您应该使用mongoDB shell创建集合,并且集合应为: 因此,您将获得包含如下字段的集合,现在在Java中创建函数,并且此函数具有作为字符串的参数,因此如下所示: } 上面的函数
本文向大家介绍Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例,包括了Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例的使用技巧和注意事项,需要的朋友参考一下 问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的。而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增