Sql 插入到表1中从另一个表2中选择*,然后从表2中删除该行
我正在尝试使用oracle sql developer中的函数将行插入表1,从表2中选择*并最终从表2中删除行。我不知道怎么做 以下是我的职责:Sql 插入到表1中从另一个表2中选择*,然后从表2中删除该行,sql,oracle,function,stored-procedures,plsql,Sql,Oracle,Function,Stored Procedures,Plsql,我正在尝试使用oracle sql developer中的函数将行插入表1,从表2中选择*并最终从表2中删除行。我不知道怎么做 以下是我的职责: create or replace FUNCTION DELETEROW(GODOWN_DIST_CODE IN TEST_TABLE.GODOWN_DIST_CODE%TYPE) return varchar2 AS returned_value varchar2(50); BEGIN begin INSERT INTO TEST_TABLE_B
create or replace FUNCTION DELETEROW(GODOWN_DIST_CODE IN
TEST_TABLE.GODOWN_DIST_CODE%TYPE) return varchar2
AS
returned_value varchar2(50);
BEGIN
begin
INSERT INTO TEST_TABLE_BACKUP SELECT * FROM TEST_TABLE WHERE
GODOWN_DIST_CODE=GODOWN_DIST_CODE;
DELETE TEST_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
INSERT INTO NEW_TABLE_BACKUP SELECT * FROM NEW_TABLE WHERE GODOWN_DIST_CODE
= GODOWN_DIST_CODE;
DELETE FROM NEW_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
exception
WHEN no_data_found THEN
returned_value := '#';
end;
RETURN returned_value;
END;
试试这个:-
CREATE OR REPLACE PROCEDURE TABLE2_TO_TABLE1
IS
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TABLE1(
Field1,
Field2,
Field3
)
SELECT Field1,
Field2,
Field3
FROM TABLE2';
EXECUTE IMMEDIATE 'DELETE TABLE2 where rownum != 0';
END TABLE2_TO_TABLE1;
执行程序
BEGIN
TABLE2_TO_TABLE1;
END;
/
根据我们的讨论,我为您提出了这个解决方案。尽管我觉得没有必要使用
函数
但我还是用函数
展示了exmaple。我还将您的删除逻辑写入了一个过程
,根据delete语句的成功与否,变量var
中包含一个Return
值,并作为您可以使用的参数发送出去
功能:
CREATE OR REPLACE FUNCTION confirm_ckh
RETURN VARCHAR
AS
BEGIN
RETURN ('#');
END;
程序:
CREATE OR REPLACE PROCEDURE DELETEROW (
GODOWN_DIST_CODE IN TEST_TABLE.GODOWN_DIST_CODE%TYPE,
var OUT varchar2) <-- Out parameter to get the return value
AS
BEGIN
BEGIN
INSERT INTO TEST_TABLE_BACKUP
SELECT *
FROM TEST_TABLE
WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
IF SQL%ROWCOUNT > 0
THEN
DBMS_OUTPUT.put_line ('Insert Success TEST_TABLE_BACKUP');
var:=confirm_ckh;
END IF;
DELETE TEST_TABLE
WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
IF SQL%ROWCOUNT > 0
THEN
DBMS_OUTPUT.put_line ('Deleted records from TEST_TABLE ');
var:=confirm_ckh;
END IF;
INSERT INTO NEW_TABLE_BACKUP
SELECT *
FROM NEW_TABLE
WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
IF SQL%ROWCOUNT > 0
THEN
DBMS_OUTPUT.put_line ('Insert Success for NEW_TABLE_BACKUP');
var:=confirm_ckh;
END IF;
DELETE FROM NEW_TABLE
WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;
IF SQL%ROWCOUNT > 0
THEN
DBMS_OUTPUT.put_line ('Deleted records from NEW_TABLE ');
var:=confirm_ckh;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
null;
END;
END;
创建或替换过程DELETEROW(
测试表中的仓库区代码。仓库区代码%TYPE,
var OUT varchar2)0
然后
DBMS_OUTPUT.put_行(“插入成功测试_表_备份”);
var:=确认_ckh;
如果结束;
删除测试表
其中仓库区代码=仓库区代码;
如果SQL%ROWCOUNT>0
然后
DBMS_OUTPUT.put_行(“从测试表中删除的记录”);
var:=确认_ckh;
如果结束;
插入到新的\u表\u备份中
挑选*
从新表
其中仓库区代码=仓库区代码;
如果SQL%ROWCOUNT>0
然后
DBMS_OUTPUT.put_line('Insert Success for NEW_TABLE_BACKUP');
var:=确认_ckh;
如果结束;
从新表中删除
其中仓库区代码=仓库区代码;
如果SQL%ROWCOUNT>0
然后
DBMS_OUTPUT.put_行(“从新_表中删除的记录”);
var:=确认_ckh;
如果结束;
例外情况
当找不到数据时
然后
无效的
结束;
结束;
向观众展示您迄今为止尝试过的不起作用或给出错误结果的内容。您不能使用返回内部过程。如果要返回某些内容,则需要创建函数
<代码>函数
和过程
是两件不同的事情。@XING,我创建了上面的函数,当我执行该函数时,所有的行都被插入以测试表备份和新表备份,但我用一些值传递参数并将其用作where条件,甚至所有记录都被删除。@KeyurPanchal,我已经更新了我的函数,当我使用参数“所有行都将插入备份表”执行函数时,并从主表中删除所有行,但不使用where CLUSE,您能告诉我我犯了什么错误吗?@BharathPateru。当您的需求需要一个过程时,您为什么要追求功能
。我们通常在需要计算或需要返回逻辑或布尔值的地方使用函数。您可以按照下面的示例进行操作。