存儲過程oracleinsert
『壹』 oracle存儲過程中Insert表名(欄位名)values(欄位名)
insert into 表名 values後面括弧里應該是值,而不是欄位名;
如果是從另外一個表裡插入到當前表,應該是這樣寫:
Insert Into TI_AIS_ADDRLINE
(
ADDR_ID --地址標識
,DIST_CD --行政區劃代碼
,POST_CD --郵政編碼
,POST_CD1 --郵政編碼1
,POST_CD2 --郵政編碼2
,ADDR_NAME --地址名稱
,RELA_ADDR_ID --關聯地址標識
,RELA_ADDR_NAME --關聯地址名稱
,DATA_SRC_CD --數據來源代碼
,LAST_UPD_DATE --最後更新日期
)
SELECT
ADDR_ID
,DIST_CD
,POST_CD
,POST_CD1
,POST_CD2
,ADDR_NAME
,RELA_ADDR_ID
,RELA_ADDR_NAME
,DATA_SRC_CD
,to_date(LAST_UPD_DATE, 'yyyy-mm-dd hh24:mi:ss')
FROM 表名
;
『貳』 oracle中存儲過程中insert into的問題
可以考慮把where那裡修改為where exists(select * ....),我這里沒有環境,你可以查詢where exists 和where not exists的用法自己測試一下。
『叄』 oracle生成insert語句的存儲過程怎麼寫
你可以用oracle的UTL_FILE包,直接將文件生成到伺服器上。
下面給你個例子。測試環境windows2008 + oracle11g。
Blob,Clob類型不能導出,導出的文本適用於sqlserver.
createtableTest_Gsh(
aCharvarchar2(20),
bNumnumber,
cDatedate);
insertintoTest_Gsh(aChar,bNum,cDate)
select'這',1,sysdatefromal
unionall
select'是',2,sysdatefromal
unionall
select'測',3,sysdatefromal
unionall
select'試',4,sysdatefromal
unionall
select'UTL_FILE',5,sysdatefromal
unionall
select'的',to_Number(null),Nullfromal
unionall
select'例子',to_Number(null),Nullfromal;
--建立目錄
createdirectoryUTL_FILE_GAOas'c:';
--建立過程
createorreplaceprocereout_File_Testas
vFileNamevarchar2(50);
vFilePathvarchar2(30);
out_fileutl_file.file_type;
vBackupTimevarchar2(30);
begin
vBackupTime:=to_Char(sysdate,'yyyymmddhh24miss');
dbms_output.put_line(vBackupTime);
vFilePath:='UTL_FILE_GAO';
vFileName:='Test_Gsh'||vBackupTime||'.sql';
dbms_output.put_line(vFileName);
out_file:=utl_file.fopen(vFilePath,vFileName,'w');
utl_file.put_line(out_file,'--備份表:Test_Gsh');
utl_file.put_line(out_file,'--備份時間:'||vBackupTime);
forrin(select'insertintoTest_Gsh(aChar,bNum,cDate)values('||
casewhenaCharisnullthen'Null'elseChr(39)||aChar||Chr(39)end||','||
casewhenbNumisnullthen'Null'elseto_Char(bNum)end||','||
casewhencDateisnullthen'Null'else'cast('||Chr(39)||to_Char(cDate,'yyyymmddhh24miss')||Chr(39)||'asdateTime)'end||
');'insData
fromTest_Gsh)loop
utl_file.put_line(out_file,r.InsData);
endloop;
utl_file.FCLOSE(out_file);
exception
whenothersthen
dbms_output.put_line(sqlerrm);
utl_file.FCLOSE(out_file);
end;
/
『肆』 Oracle 存儲過程insert into select 日期條件問題
首先你測試看看,第二段的日期是不是沒有傳遞進去,在ORACLE裡面設置輸出跟蹤到底問題出在哪兒,insert into select 嵌套語句是可以識別變數的,你的語句沒什麼問題,看看是不是你傳遞參數沒到位
『伍』 oracle生成insert語句的存儲過程怎麼寫
參考代碼:
包stuPack添加代碼如下:
PROCEDURE usp_InsertStudent (
vage NUMBER,vstuName VARCHAR2);
包stuPack的程序包主體添加代碼如下
PROCEDURE usp_InsertStudent (
vage NUMBER,vstuName VARCHAR2) As
BEGIN
INSERTINTOSTUDENT(stuName,age)
VALUES(vstuName,vage);
END;
主鍵自增方案:
create sequencestuSeq;
CREATEORREPLACETRIGGER stu_TRG
BEFOREINSERTORUPDATEOF stuID
ON Student
FOREACHROW
BEGIN
IF INSERTING THEN
SELECT stuSeq.NEXTVAL INTO :NEW.stuID FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允許更新stuID值!');
ENDIF;
『陸』 oracle 怎樣通過存儲過程insert clob欄位
您好,很高興為您解答。
createtabledemo
(idintprimarykey,
theBlobblob
)
/
createorreplacedirectorymy_filesas'/export/home/tkyte/public_html';
declare
l_blobblob;
l_bfilebfile;
begin
insertintodemovalues(1,empty_blob())
returningtheBlobintol_blob;
l_bfile:=bfilename('MY_FILES','aria.gif');
dbms_lob.fileopen(l_bfile);
dbms_lob.loadfromfile(l_blob,l_bfile,
dbms_lob.getlength(l_bfile));
dbms_lob.fileclose(l_bfile);
end;
/
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~O(∩_∩)O~
『柒』 oracle存儲過程怎樣批量插入新數據
需要生成的SQL
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存儲過程實現
create or replace procere proc_casekey_upstate
as
casekey char(14);
begin
for i in 1..10000000 loop
casekey := 'TMP'||lpad(i,7,0); -- TMP0000001
insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
end loop;
commit;
end;
begin
proc_casekey_upstate();
end;
測試發現生成一千萬條數據用了14分鍾左右,性能還是可以了,如果先去掉TMP_NUM_STATUS_ID的外鍵估計更快。
或者:
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from al connect by level <= 1000000;
『捌』 oracle 用存儲過程向表插入數據的問題
實際上存儲過程向表中插入數據和sql執行的區別是不大的,只不過是存儲過程是用loop等循環插入,之後順序執行sql語句,不用命令行執行。
_data_4_pressure_3
is
--Result1VARCHAR2(50);
VAR_numnumber;
begin
VAR_num:=1;
while
VAR_num<1000000
LOOP
insertintorp_trans_log_day
(trans_time,
trans_province,
trans_type,
score_range,
rule_name,
trans_num)
selectto_date('2013/10/29','yyyy-mm-dd'),
round(dbms_random.value(1,300))||'省',
round(dbms_random.value(1,800))||'類型',
round(dbms_random.value(1,100))||'風險分值',
round(dbms_random.value(1,300))||'規則名稱',
'1'
fromal;
commit;
VAR_num:=VAR_num+1;
<ahref="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">end</a>loop;
<ahref="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">end</a>insert_data_4_pressure_3;
『玖』 請問這個oracle的insert的存儲過程執行為什麼報錯啊
是這樣的,這是因為你這里的insert跟update是同一個事務,所以是可以update的到的,不會報錯。 insert/update/delete這些DML語句以及select * from table_name for update都會在表上加RX鎖(其中select for update用於在讀數據過程中禁止其他事務對所讀數據進行DML操作)。操作完成後commit或rollback解鎖。 當執行相應的語句的時候,系統自動在所要操作的表上申請表級RX鎖,當表級鎖獲得後,系統再自動申請TX行級鎖,並將相應數據行加X鎖。當表上加RX鎖後,不許其他事務對該表加X排他鎖(如drop table),不允許其他事務對該表加X鎖(如建索引);但允許其他事務對該表再加RS鎖(如執行lock table in row share mode)或RX鎖(如插刪改記錄,注意,其他事務在同一表上再加RX表鎖沒問題,但是再加行鎖時,不能再加在表內已加X鎖的數據行上,而只允許加在表內其他數據行上)。 而你這里的例子本身就是一個事務,就好比你對一個新建的表Insert記錄後不commit,但是你select * from table_name的時候也是可以看到剛insert的記錄的不是么。而如果同時有第二個事務select該表或者update某記錄 都會顯示未選定行的。 這樣回答解決你的疑問了么? 藍屏