存储过程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 秒)