Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 使用存储过程一次插入到3个表中_Oracle_Stored Procedures - Fatal编程技术网

Oracle 使用存储过程一次插入到3个表中

Oracle 使用存储过程一次插入到3个表中,oracle,stored-procedures,Oracle,Stored Procedures,如何在存储过程中插入多个表?例如,我有一个表单,当我提交这个表单值时,它应该插入到Oracle数据库中的3个表中。我已经编写了一个存储过程 CREATE OR REPLACE PROCEDURE insert_through_procedure( p_cid IN table1.cid%TYPE, p_uid IN table1.UID%TYPE, p_chlnno IN table1.chlnno%TYPE, p_cdate IN table1.cdate%TYPE, p_c

如何在存储过程中插入多个表?例如,我有一个表单,当我提交这个表单值时,它应该插入到Oracle数据库中的3个表中。我已经编写了一个存储过程

CREATE OR REPLACE PROCEDURE insert_through_procedure(
p_cid IN table1.cid%TYPE,
p_uid IN table1.UID%TYPE,
p_chlnno     IN table1.chlnno%TYPE,
p_cdate      IN table1.cdate%TYPE,
p_createdby  IN table1.createdby%TYPE,
p_createdon  IN table1.createdon%TYPE,
p_finyearid  IN table1.finyearid%TYPE,
p_cstatus    IN table1.cstatus%TYPE,
p_aid        IN table2.applid%TYPE,
p_name       IN table2.aname%TYPE,
p_addr       IN table2.aaddress%TYPE,
p_email      IN table2.aemail%TYPE,
p_mobile     IN table2.mobileno%TYPE,
p_contact    IN table2.contactno%TYPE,
p_cdid       IN cm_challan_details.cdid%TYPE,
p_sid        IN table3.sid%TYPE,
p_year       IN table3.year%TYPE,
p_month      IN table3.month%TYPE,
p_val1       IN table3.val1%TYPE,
p_val2       IN table3.val2%TYPE,
p_val3       IN table3.val3%TYPE,
p_totalval   IN table3.total%TYPE) AS
BEGIN
  INSERT INTO table1(cid, UID, chlnno, cdate, createdby, createdon, finyearid, cstatus) VALUES (1, 1, 'chln01', p_challandate, p_createdby, to_date('02 / 02 / 2015','dd/mm/yyyy'), 1, 1);    
  INSERT INTO table2(cid, aid, aname, aaddress, aemail, mobileno, contactno) VALUES (1, 1, 'usha', p_addr, p_email, p_mobile, p_contact);    
  INSERT INTO table3(cdid, cid, sid, year, month, fee, cess, penalty, total) VALUES (101, 1, 1, p_year, p_month, 10.25, 0.25, 0.1, 10.61);    
  COMMIT;
END insert_through_procedure;
我通过在insert语句中提供值来测试这个存储过程,我没有错误,但是当我编译和执行时,我得到了错误

Connecting to the database u_tax.
ORA-01400: cannot insert NULL into ("PTIS_CHECKLIST"."table1"."CREATEDON")
ORA-06512: at "PTIS_CHECKLIST.INSERT_THROUGH_PROCEDURE", line 28
ORA-06512: at line 48
Process exited.
Disconnecting from the database u_tax.
多谢各位。现在我又犯了一个错误

Procedure PTIS_CHECKLIST.table3@u_tax
Error(28,3): PL/SQL: SQL Statement ignored
Error(28,166): PL/SQL: ORA-00984: column not allowed here
Error(29,3): PL/SQL: SQL Statement ignored
Error(30,16): PL/SQL: ORA-00984: column not allowed here
新错误已更新

Connecting to the database u_tax.
ORA-00001: unique constraint (PTIS_CHECKLIST.table1_PK) violated
ORA-06512: at "PTIS_CHECKLIST.insert_through_procedure", line 28
ORA-06512: at line 48
Process exited.
Disconnecting from the database u_tax.
我哪里出错了。。。。?有谁能帮我解决这个问题吗

p_createdon在表1中。createdon%类型

2015年3月10日

什么是
10/03/2015
?它是日期还是字符串?除非你明确告诉甲骨文,否则甲骨文对此一无所知。您不能像这样插入值
10/03/2015
。首先,您需要告诉我们列
createdon
的数据类型。如果处理的是日期,则数据类型必须是日期

假设数据类型是日期。您需要使用插入到日期和适当的格式掩码将文字转换为日期。使用

to_date('10/03/2015','DD/MM/YYYY')
你的插入声明:

INSERT INTO cm_challan_main 
   (cid, UID, chlnno, cdate, createdby, createdon, finyearid, cstatus)
 VALUES 
(1, 1, chln01, p_challandate, p_createdby, to_date('10/03/2015','DD/MM/YYYY'), 1, 1); 
ORA-00984:此处不允许使用列

另一个问题是insert语句中使用的列名而不是值。必须将字符串文字括在单引号内

chln01

乌沙

必须将上述字符串插入为:


'chln01'
'usha'

从我的评论中复制:

如果是日期类型,则必须在2015年3月10日前后添加双引号。如果不添加引号,oracle将分割这些值

或者可以使用
to_date()
函数将其显式转换为日期

TO_DATE( '10/03/2015', 'dd/mm/yyyy') 

您可以格式化您的代码吗?ORA-01400:无法在(“PTIS\U检查表”.“表1”.“CREATEDON”)中插入NULL ORA-06512:在“PTIS\U检查表.通过\U过程插入\U”中,第28I行已格式化代码。。你能帮帮我吗@Jens@Jens非常感谢。已解决日期错误。。现在我犯了不同的错误。我已经更新了上面的错误部分,你能帮我吗?@user4627344,你有多个问题。看看我的答案,我已经指出了几个。非常感谢。我解决了这两个错误,但仍然得到了错误(28,3)和(28166)…那么你告诉我这些行号是什么?在不知道表结构的情况下,没有人可以对错误原因进行任意猜测。如果对您有帮助,请将其标记为已回答。我已更新了更新的行号错误。你的回答对我帮助很大。。谢谢你……你没有按我的建议做。你似乎连我的答案都没读过<代码>'02/02/2015'错误。您必须使用
截止日期('2015年3月10日','DD/MM/YYYY')
。简单地从答案中复制粘贴我的查询有多困难。对不起,在更新代码时我犯了错误,但我已经按照您的建议执行了,并且我已经阅读了您建议的答案。。。。现在你可以看到我已经正确地更新了它。