请教有关存储过程的写法和使用。 ( 积分: 50 )

  • 主题发起人 主题发起人 miqi2000
  • 开始时间 开始时间
M

miqi2000

Unregistered / Unconfirmed
GUEST, unregistred user!
新人学习中。
oracle数据库内有一个表:含两个字段(序号,名字)。
1。现需要在ORACLE中写一个存储过程,实现在表内插入或更新(当序号存在时更新,否则插入)。过程的代码如何写?
2。delphi如何调用该过程。
能具体给出示范代码最好。
 
怎么没人回答?是我问的不明白吗?
 
DELPHI中调用存储过程当然得用ADOStoredProc控件了,,
例:
stpjssl.Close;
stpjssl.Parameters[0].Value := startdate;//传入的第一个参数
stpjssl.Parameters[1].Value := enddate;//传入的第二个参数
stpjssl.Parameters[2].Value := '01';//传入的第三个参数(你的参数个数自己根据情况定就可以)
stpjssl.ExecProc;//执行
另外我没用过ORACLE,只用过SYBASE和SQL SERVER 但这些都是大同小异的,
比如说:先判断一下是否存在数据
select 1 from tablename where 序号=@序号//'@序号'为传入的参数
if @@rowcount=1 then
begin
//更新数据
end
else
begin
//插入数据
end
只要你会写SQL语句的话,存储过程应该很简单了吧!!!!
 
存储过程中的插入更新的代码我能写,但在这之前的代码如何写?
参数如何在存储过程中声明?
select 1 from tablename where 序号=@序号//'@序号'为传入的参数
if @@rowcount=1 then
这样的语句在ORACLE中能用吗?
 
这些就好办了,你找一个例子,看一下它的格式就可以了,即使没有现成的例子,Oracle也会有一些系统自带的系统存储过程,你随便找一个带参数的看一下格式就可以了。
 
我这有现成的SQL SERVER和SYBASE的存储过程,你要的话我可以给你发一个,其实结构都差不多的。。。
 
select 1 from tablename where 序号=@序号//'@序号'为传入的参数
if @@rowcount=1 then
这样的语句在ORACLE中能用吗?
@序号 只是我举的一个参数的例子,在真正写代码的时候从来不用汉字做为参数或变量名的,比如可以用@ID 等。在SYBASE 和SQL SERVER 中@是变量名或参数名的前辍,ORACLE中我不太清楚,你试一下就可以了,
另外系统变量@@rowcount相当于一个全局变量,在SYBASE 和SQL SERVER 中是判断前一个SQL语句所影响的行数,一般大于零就说明数据存在了,ORACLE中肯定会有这样的系统变量,至于是不是叫这个名我就不太清楚了
 
问题已解决,谢谢!
过程代码如下:
create or replace procedure psys_regedit
(
CLIENT_MAC1 in sys_regedit.CLIENT_MAC%type,
CLIENT_IP1 in sys_regedit.CLIENT_IP%type,
REGEDIT_TIME1 in sys_regedit.REGEDIT_TIME%type,
computer_name1 in sys_regedit.computer_name%type,
dep_id1 in sys_regedit.dep_id%type
) as
V_count NUMBER;
begin
select count(*) into V_count from sys_regedit where CLIENT_MAC = CLIENT_MAC1;
if V_count <= 0 then
insert into sys_regedit values (CLIENT_MAC1,CLIENT_IP1,REGEDIT_TIME1,computer_name1,dep_id1);
else
update sys_regedit set CLIENT_IP = CLIENT_IP1,REGEDIT_TIME = REGEDIT_TIME1, computer_name = computer_name1, dep_id = dep_id1 where CLIENT_MAC = CLIENT_MAC1 ;
end if;
end;
/
 
后退
顶部