下面的代码应该执行以下操作: 1:读取txt文件 2:将其打印到CSV文件中; 3:更新数据库中的“ CATEGORY2”表
这不是按照我想要的方式更新表格。这是正确的方法吗?如果要在此过程中使用更新语句正确,那么它必须是INSERT INTO。
CustomPanel
我目前没有收到任何错误,但它根本没有更新我的表。 这将读取TXT文件并将其写入CSV文件,只是不更新所需的Tablle。信息。
答案 0 :(得分:3)
发现符合条件的零条记录的UPDATE语句不会被视为失败,因此即使没有记录更新,PL / SQL也会继续执行而不会出错。
UPDATE Category2 ---Should this insert the values int the Category tablE??????????
SET Category_ID= mvi, Category_name= textout
WHERE mvi = CATEGORY_ID;
您的代码似乎将mvi
初始化为1
,然后在每次循环执行时递增。该逻辑似乎假设category_id
从文件第一行的1开始,一直到对应于文件最后一行的最大ID。如果确实如此,那很好。但是我会检查一下category2
表中有哪些记录,并检查category_id
值是否确实符合您的期望。
如Rustam所指出的那样,您的UPDATE也不必要地更新category_id=mvi
,它没有任何用处(因为where子句已经确定它们已经相同)。
答案 1 :(得分:0)
也许您的答案已经内置在脚本中:
UPDATE Category2 ---Should this insert the values int the Category tablE??????????
这意味着您希望插入不存在但没有插入的行。那么这个问题的答案是否定的。如所示,影响0行的更新不视为错误,但这也不表示应创建行。如果确实是您要寻找的功能,那么您需要Merge语句而不是update。
Merge into Category2 c2
using (select mvi, textout from dual) m
on (m.mvi = c2.category_id)
when matched then
set c2.category_name = m.testout
when not matched then
insert (category_id, category_name)
values (m.mvi, m.textout);
如果请求的category_id没有退出,您将获得插入内容。但是,我同意@JeffreyKemp关于假定逻辑的观点,这似乎有点基于可疑的假设。另外,要获得完整答案,您需要提供测试数据(格式为文本)以及该数据的预期输出。