注册 登录
编程论坛 Oracle论坛

帮我看一下这个oracle过程,有问题

sdj_2003 发布于 2010-03-12 11:39, 748 次点击
CREATE OR REPLACE PROCEDURE  hm_gx_zlwz @cywdm NUMBER(10) AS   
BEGIN
  CREATE table lsb AS SELECT * FROM yw_sxcd  WHERE ywdm=@cywdm
  UPDATE lsb SET zlwz='8'
  DELETE FROM yw_sxcd WHERE ywdm=@cywdm
  insert into yw_sxcd SELECT  *  from lsb
  drop   table lsb
END
5 回复
#2
studyAsp2010-03-13 22:18
CREATE OR REPLACE PROCEDURE  hm_gx_zlwz
(cywdm NUMBER )
 AS
BEGIN
    UPDATE yw_sxcd  SET zlwz='8' WHERE ywdm=cywdm
END

没有测试,不知道这样可不可以,你试试?

[ 本帖最后由 studyAsp 于 2010-3-13 22:25 编辑 ]
#3
sdj_20032010-03-14 17:04
回复 2楼 studyAsp
谢谢,因为表不能直接更改,只有先删除再插入.

我对oracal语法不太清楚,只是按sql2005格式搬过来执行不下去。


CREATE OR REPLACE PROCEDURE  hm_gx_zlwz (cywdm NUMBER )
AS   
BEGIN
  CREATE table lsb AS SELECT * FROM yw_sxcd  WHERE ywdm=cywdm
  UPDATE lsb SET zlwz='8'
  DELETE FROM yw_sxcd WHERE ywdm=cywdm
  insert into yw_sxcd SELECT  *  from lsb
  drop   table lsb
END

出现如下错误:

PLS-00103: 出现符号 "CREATE"在需要下列之一时:
 begin case declare exit
   for goto if loop mod null pragma raise return select update
   while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge
   <a single-quoted SQL string> pipe


[ 本帖最后由 sdj_2003 于 2010-3-14 17:11 编辑 ]
#4
qxl85102010-04-15 15:20
CREATE OR REPLACE PROCEDURE  hm_gx_zlwz cywdm NUMBER(10) AS   
BEGIN
  CREATE table lsb;
  SELECT * FROM yw_sxcd  WHERE ywdm=cywdm;
  UPDATE lsb SET zlwz='8';
  DELETE FROM yw_sxcd WHERE ywdm=cywdm;
  insert into yw_sxcd SELECT  *  from lsb;
  drop   table lsb;
END
你所定义的那个变量是按照SQL Server 里面来定义的,Oracle不需要加@,直接定义变量
#5
qxl85102010-04-15 15:20
我这个也还没有测试,你可以试试
1