存儲過程insert
『壹』 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;
/
『貳』 如何在存儲過程中實現插入更新數據
--先在資料庫中創建test表,表中有列名為name,類型為varchar(50)
然後先執行
create
procere
proc_insert
@name
varchar(50)
as
begin
insert
into
test
values(@name)--插入數據
end
go
create
procere
proc_update
@newname
varchar(50),@oldname
varchar(50)
as
begin
update
test
set
name=@newname
where
name=@oldname--更新數據
end
go
--其中proc_insert為存儲過程名,可自定義
procere可使用簡寫proc
上面執行完成後調用存儲過程
exec
proc_insert
'曉華'--將"曉華"添加到test表中
exec
proc_update
'小明','曉華'
--將表中'曉華'
改為'小明',必須與存儲過程變數順序相同
exec
proc_update
@oldname='小明',@newname='曉華'--與存儲過程變數順序可以不同
drop
procere
proc_insert
刪除存儲過程proc_insert
『叄』 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
表名
;
『肆』 如何在存儲過程中判斷insert是否成功
ROW_COUNT() x0dx0aROW_COUNT()返回被前面語句升級的、插入的或刪除的行數。 這個行數和 mysql 客戶端顯示的行數及 mysql_affected_rows() C API 函數返回的值相同。x0dx0ax0dx0amysql> INSERT INTO t VALUES(1),(2),(3);x0dx0ax0dx0a問詢完成, 表中有3 行 (0.00秒)x0dx0ax0dx0a記錄: 3 重復: 0 警告: 0x0dx0ax0dx0amysql> SELECT ROW_COUNT();x0dx0ax0dx0a+-------------+x0dx0ax0dx0a| ROW_COUNT() |x0dx0ax0dx0a+-------------+x0dx0ax0dx0a| 3 |x0dx0ax0dx0a+-------------+x0dx0ax0dx0a表中有1行 (0.00 秒)x0dx0ax0dx0amysql> DELETE FROM t WHERE i IN(1,2);x0dx0ax0dx0a問詢完成, 找到2 行 (0.00 秒)x0dx0ax0dx0amysql> SELECT ROW_COUNT();x0dx0ax0dx0a+-------------+x0dx0ax0dx0a| ROW_COUNT() |x0dx0ax0dx0a+-------------+x0dx0ax0dx0a| 2 |x0dx0ax0dx0a+-------------+x0dx0ax0dx0a表中有1行 (0.00 秒)
『伍』 如何在存儲過程中判斷insert是否成功
存儲過程的結果無法直接與select 做union,一個辦法是建一張臨時表,或者使用表變數,通過insert into exec將存儲過程的內容暫存起來,最後做union,大概語句像這樣:
declare @table table(...);insert into @tableexec zjsj '10901';select * from aunionselect * from @table;
『陸』 sql存儲過程動態Insert參數異常
檢查一下表 T_Score_1002的結構,很可能SubSemester列是varchar 類型的。必須保證觸發器和存儲過程中的@SubSemester變數的類型與表中SubSemester列的類型一致或者兼容。
『柒』 如何在存儲過程中實現插入更新數據
--先在資料庫中創建test表,表中有列名為name,類型為varchar(50)
然後先執行
create procere proc_insert
@name varchar(50)
as
begin
insert into test values(@name)--插入數據
end
go
create procere proc_update
@newname varchar(50),@oldname varchar(50)
as
begin
update test set name=@newname where name=@oldname--更新數據
end
go
--其中proc_insert為存儲過程名,可自定義 procere可使用簡寫proc
上面執行完成後調用存儲過程
exec proc_insert '曉華'--將"曉華"添加到test表中
exec proc_update '小明','曉華' --將表中'曉華' 改為'小明',必須與存儲過程變數順序相同
exec proc_update @oldname='小明',@newname='曉華'--與存儲過程變數順序可以不同
drop procere proc_insert 刪除存儲過程proc_insert
『捌』 在存儲過程中編寫INSERT語句,通過怎麼樣的方法或取得返回值,讓我知道插入的數據成功了呢
可以給這個存儲過程定義一個返回的變數
例如
declare @CS int
exec 存儲過程 『』,『』,@CS
select @CS
這個返回值 可以在存儲過程里,當你Insert 成功的時候
給予返回值賦予個值
『玖』 呵呵,insert 語句的存儲過程如何編寫
INSERT INTO 語句
INSERT INTO 語句用於向表格中插入新的行。
語法
INSERT INTO 表名稱 VALUES (值1, 值2,....)
我們也可以指定所要插入數據的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
插入新的行
"Persons" 表:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
SQL 語句:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
結果:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
在指定的列中插入數據
"Persons" 表:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
SQL 語句:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
結果:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
Wilson Champs-Elysees
希望能幫到你。
『拾』 如何在存儲過程中判斷insert是否成功
ROW_COUNT()
ROW_COUNT()返回被前面語句升級的、插入的或刪除的行數。 這個行數和 mysql 客戶端顯示的行數及 mysql_affected_rows() C API 函數返回的值相同。
mysql> INSERT INTO t VALUES(1),(2),(3);
問詢完成, 表中有3 行 (0.00秒)
記錄: 3 重復: 0 警告: 0
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 3 |
+-------------+
表中有1行 (0.00 秒)
mysql> DELETE FROM t WHERE i IN(1,2);
問詢完成, 找到2 行 (0.00 秒)
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 2 |
+-------------+
表中有1行 (0.00 秒)