存储过程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某记录 都会显示未选定行的。 这样回答解决你的疑问了么? 蓝屏