나는 2 테이블의 이름을 액센트로하는 프로 시저를 인수로 쓰고 2의 행 또는 수를 비교하려고합니다. 또한 2 열의 각 필드를 원합니다. missmatch는 다른 오류 테이블로 이동했습니다.오라클에 일반 프로 시저 작성
누구나이 작업을 수행 할 수있는 PL/SQL 프로 시저를 제공 할 수 있습니까? 오라클에서이 문제를 해결하고 싶습니다. 9
나는 2 테이블의 이름을 액센트로하는 프로 시저를 인수로 쓰고 2의 행 또는 수를 비교하려고합니다. 또한 2 열의 각 필드를 원합니다. missmatch는 다른 오류 테이블로 이동했습니다.오라클에 일반 프로 시저 작성
누구나이 작업을 수행 할 수있는 PL/SQL 프로 시저를 제공 할 수 있습니까? 오라클에서이 문제를 해결하고 싶습니다. 9
dynamic sql은 PL/SQL에서 사용할 수 있습니다. EXECUTE IMMEDIATE
님은 친구입니다. PL/SQL 구문에 대한 확인
CREATE OR REPLACE PROCEDURE COMPARE_ROW_COUNT(T1 IN VARCHAR2(200), T2 IN VARCHAR2(200)) AS
v_cursor integer;
v_r1 integer;
v_r2 integer;
v_sql varchar2(200);
BEGIN
v_sql := "select count(1) into :1 from " || T1;
EXECUTE IMMEDIATE v_sql USING v_r1;
v_sql := "select count(1) into :1 from " || T2;
EXECUTE IMMEDIATE v_sql USING v_r2;
-- compare v_r1 and v_r2
END;
100 % : 두 개의 테이블 이름을 가지고 자신의 행 수를 비교하려고하는 경우
그래서, 당신은 뭔가를 할 것입니다. 지난 PL/SQL 코딩을 마친 이후로 꽤 오래되었습니다!
비슷한 접근 방식으로 DBMS_SQL
을 사용하면 동일한 결과를 얻을 수 있습니다. 구문은 좀 더 복잡합니다.
바인드 변수는 테이블 이름을 제공 할 수 없습니다. –
확인. 이를 반영하도록 코드가 변경됩니다. 감사! –
Pablos 예제가 제대로 작동하지 않는다는 생각은 옳습니다.
이와 비슷한 방식입니다.
create or replace PROCEDURE COMPARE_ROW_COUNT(T1 IN VARCHAR2, T2 IN VARCHAR2) AS
v_r1 number;
v_r2 number;
v_sql1 varchar2(200);
v_sql2 varchar2(200);
BEGIN
v_sql1 := 'select count(1) from ' || T1;
v_sql2 := 'select count(1) from ' || T2;
EXECUTE IMMEDIATE v_sql1 into v_r1;
EXECUTE IMMEDIATE v_sql2 into v_r2;
dbms_output.put_line(T1 || ' count = ' || v_r1 || ', ' || T2 || ' count = ' || v_r2);
END;
실수를 없애기 위해 예제를 변경했습니다. 감사! –
@all : 회신 해 주셔서 감사합니다. 도움이되었습니다.이 두 테이블의 불화를 어떻게 비교할 수 있는지 알려주십시오. – user223541
두 테이블은 항상 정확히 동일한 열 정의를 갖고 있으며 모든 테이블간에 하나의 오류 테이블이 있거나 테이블 쌍당 하나의 오류 테이블이 있습니까? –
@ david : 예 그들은 똑같은 문법을 가지고 있습니다. – user223541