使用WHERE子句

时间:2015-10-31 18:29:37

标签: stored-procedures oracle10g where-clause insert-into

我有一个Oracle 10g的存储过程,需要在表中创建一个新行,而不是创建重复项。

只要所有列都不相同,该表就允许重复。这是因为最后两列的值可能不同。

话虽如此,当我尝试存储我的程序时,我得到以下标志:

Line # = 10 Column # = 1 Error Text = PL/SQL: SQL Statement ignored
Line # = 13 Column # = 3 Error Text = PL/SQL: ORA-00933: SQL command not properly ended

程序看起来很好[假设我之前没有为插入添加WHERE子句]。

所以要么我的格式不是应该的格式,要么我的逻辑关闭。 无论情况如何,我都尝试在线查找并在stackoverflow上找到示例,并且不尽如人意。

有关如何调整此内容的任何建议吗?

 (val_ID              tablename.column1%type,     
  val_cat           tablename.column2%type,     
  val_sub          tablename.column3%type   

 )        

AS  
BEGIN    

INSERT INTO tablename  (column1, column2, column3)     

VALUES (val_ID, val_cat, val_sub)

WHERE ((column1 != val_ID) and (column2 != val_cat) and (column3 != val_sub));

COMMIT;               
END;  

我甚至删除了WHERE子句中的“(”,没有任何改变。

更新

尝试了这个建议并且所有错误都消失了[但是记录没有创建]

 (val_ID              tablename.column1%type,       
 val_cat           tablename.column2%type,       
 val_sub          tablename.column3%type     

 )          

AS    
BEGIN      

INSERT INTO tablename  (column1, column2, column3)       
SELECT val_ID, val_cat, val_sub 

FROM dual 
MINUS 

SELECT val_ID, val_cat, val_sub 

FROM tablename; 

2 个答案:

答案 0 :(得分:1)

insert语句没有where子句。但是,您可以使用insert-select语句来模拟它:

INSERT INTO tablename  (column1, column2, column3)     
SELECT val_ID, val_cat, val_sub
FROM   dual
MINUS
SELECT column1, column2, column3
FROM   tablename;

答案 1 :(得分:0)

@Mureinik的例子确实否定了我的所有错误;但是,在测试时它没有创建新行。

所以我目前的工作是VB.net中的查询,检查值是否存在,然后实现一个简单的插入存储过程:

//Make select statement and look at table for whether more than 0 rows shows up. If 0 rows, then execute stored procedure

If DsAds1.Tables(0).Rows.Count = 0 Then

   ...do stored procedure

End If

存储过程

(val_ID          tablename.column1%type,       
val_cat          tablename.column2%type,       
val_sub          tablename.column3%type     

)          

AS    
BEGIN      

INSERT INTO tablename  (column1, column2, column3)       
VALUES( val_ID, val_cat, val_sub);

COMMIT;                 
END;