从一个用户接受表数据 |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
各位先进: 这样的存储过程如何写?oracle8.16
想实现:把表从一个用户导入到另一个用户 create or replace procedure FromYFSL(
p_year IN VARCHAR2 --输入年
) IS
v_user VARCHAR2(10); --依据年确定用户
v_cnt number:=0;
--利用游标变量
v_sql VARCHAR2 (4000);
TYPE curref IS REF CURSOR;
v_cur curref; begin
v_user:='dw'||p_year;
--判断该用户是否存在,否则触发用户不存在异常
SELECT COUNT(*) INTO v_cnt FROM all_users t WHERE t.USERNAME =UPPER(v_user);
If v_cnt=1 THEN
--导入单位数据dwgk
v_sql:='SELECT * FROM '||v_user||'.DW';
EXECUTE IMMEDIATE 'DELETE FROM '||v_user||'.DW '; --clear dw
OPEN v_cur FOR v_sql;
LOOP
FETCH v_cur INTO v_dw;
EXIT WHEN v_cur%NOTFOUND;
//这样的sql语句好像不行耶,而且v_user.dw 也编译不过去,,
--插入单位值
INSERT INTO STUDY.DW(DM, DW, ZDB,Addr ,BDDH )
(select t.dm,
t.dw,
t.zdb,
t.addr,
t.bddh
from v_user.dw t);
END LOOP;
CLOSE v_cur;
END IF;
end;
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi zzmbeyond01, PL/SQL 中是不能用這樣的寫法的!
INSERT INTO STUDY.DW(DM, DW, ZDB,Addr ,BDDH ) (select t.dm, t.dw, t.zdb, t.addr, t.bddh from v_user.dw t);先組合出 Insert SQL Command 再用你先前的語法試試應該可行 EXECUTE IMMEDIATE 'Your SQL Command'; ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi zzmbeyond01, 是的,如果欄位順序與數量一致,你甚至連欄位名稱都可以省略,即使欄位名稱不一樣也可以
insrtt into t2 select * from t1但是若欄位順序或欄位數量不一致,就必須寫清楚 insert into t2 (field1, field2, .....) select field1, field2, .... from t1---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |