简单的存储过程!

leiru 2008-10-21 04:36:11
我想做一个存储过程,实现的功能是:我用的数据库是oracle
select comcode from Company where comname like '%上海%' //上海是参数
insert into user(id,name,comcode) values('id','name','comcode') //id,name,comcode都是参数

这样的存储过程怎么写啊?今天刚接触

如果不建立存储过程,上面的参数可以手动填写,但是要求使用一条sql语句。这样的sql怎么写啊??
知道的话就帮帮忙把?谢谢~!
...全文
221 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahai99007 2008-10-22
  • 打赏
  • 举报
回复
给你个例子:

CREATE OR REPLACE PROCEDURE

TEST1
(
id in number,
name in varchar2,
selectid in number
)
as
tem manager.testtable.name%type;
begin
select age into tem from manager.testta

where id=selectid;
insert into manager.testtable(id,name,a

values (id,name,tem);
end;


你可以建立个这样的表尝试下,我这没问题的。
leiru 2008-10-22
  • 打赏
  • 举报
回复
引用 7 楼 dahai99007 的回复:
SQL code
create or replace procedure procedure_name
(
参数1 in DataType,
参数2 in DataType,
参数3 in DataType,
参数4 in DataType

as
begin
select comcode from Company where comname like 参数1;
insert into user(id,name,comcode) values(参数2, 参数3, 参数4 );
commit;
end;


那么要把comcode 赋给参数4要怎么写呢??
insert into user(id,name,comcode) values(参数2, 参数3, comcode);
是这么写吗??
dahai99007 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leiru 的回复:]
引用 7 楼 dahai99007 的回复:
SQL code
create or replace procedure procedure_name
(
参数1 in DataType,
参数2 in DataType,
参数3 in DataType,
参数4 in DataType

as
begin
select comcode from Company where comname like 参数1;
insert into user(id,name,comcode) values(参数2, 参数3, 参数4 );
commit;
end;



楼上的,参数4是通过
select comcode from Company where…
[/Quote]
你把查出来的comcode赋给参数4.
leiru 2008-10-22
  • 打赏
  • 举报
回复
知道了。。谢谢大家~!给各位加分
leiru 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenqingyu 的回复:]
SQL codecreate or replace procedure XXX(p_id data_type,p_name data_type,p_pos datatype) as
--p_pos 上海
v_comcode data_type;
begin

EXECUTE IMMEDIATE 'select comcode from Company where comname like ''%'||p_pos||'%''' into v_comcode; --要保证只返回一行数据

insert into user(id,name,comcode) values(p_id,p_name,v_comcode);

end;



差不多就这样了
[/Quote]

PROCEDURE CCICDB.TESTB 编译错误

错误:PLS-00215: String length constraints must be in range (1 .. 32767)
行:2
文本:v_comcode varchar2;

错误:PL/SQL: ORA-00913: too many values
行:7
文本:INSERT INTO Cc_User (UserCode,UserName,UserEName,Password,

错误:PL/SQL: SQL Statement ignored
行:7
文本:INSERT INTO Cc_User (UserCode,UserName,UserEName,Password,
leiru 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dahai99007 的回复:]
SQL code
create or replace procedure procedure_name
(
参数1 in DataType,
参数2 in DataType,
参数3 in DataType,
参数4 in DataType

as
begin
select comcode from Company where comname like 参数1;
insert into user(id,name,comcode) values(参数2, 参数3, 参数4 );
commit;
end;

[/Quote]

楼上的,参数4是通过
select comcode from Company where comname like 参数1;
参数1查出来的啊??
leiru 2008-10-21
  • 打赏
  • 举报
回复
谢谢各位了,我先试一下。。
dahai99007 2008-10-21
  • 打赏
  • 举报
回复

create or replace procedure procedure_name
(
参数1 in DataType,
参数2 in DataType,
参数3 in DataType,
参数4 in DataType

as
begin
select comcode from Company where comname like 参数1;
insert into user(id,name,comcode) values(参数2, 参数3, 参数4 );
commit;
end;
sten 2008-10-21
  • 打赏
  • 举报
回复
create or replace procedure p_test
(iPos in varchar2,
iId in varchar2,
iName in varchar2,
iComcode in varchar2)
as
v_sqlSel varchar2(100);
v_sqlIns varchar2(100);
begin
v_sqlSel := 'select comcode from Company where comname like ''%' ||iPos||'%''';
--iPos 可以传入"上海"
v_sqlIns := 'insert into user(id,name,comcode) values(''';
v_sqlIns := v_sqlIns || iId || ''',''';
v_sqlIns := v_sqlIns || iName || ''',''';
v_sqlIns := v_sqlIns || iComcode || ''')';
....
....
....
end;


后面就看你要怎么用了
mantisXF 2008-10-21
  • 打赏
  • 举报
回复
-- TRY IT .. 比如你输入的ID=1,NAME='TEST':
INSERT INTO USER(ID,NAME,COMCODE)
SELECT 1 EID, 'TEST' ENAME, COMCODE
FROM COMPANY
WHERE COMNAME LIKE '%SHANGHAI%';
[Quote=引用楼主 leiru 的帖子:]
我想做一个存储过程,实现的功能是:我用的数据库是oracle
select comcode from Company where comname like '%上海%' //上海是参数
insert into user(id,name,comcode) values('id','name','comcode') //id,name,comcode都是参数

这样的存储过程怎么写啊?今天刚接触

如果不建立存储过程,上面的参数可以手动填写,但是要求使用一条sql语句。这样的sql怎么写啊??
知道的话就帮帮忙把?谢谢…
[/Quote]
chenqingyu 2008-10-21
  • 打赏
  • 举报
回复
create or replace procedure XXX(p_id data_type,p_name data_type,p_pos datatype) as
--p_pos 上海
v_comcode data_type;
begin

EXECUTE IMMEDIATE 'select comcode from Company where comname like ''%'||p_pos||'%''' into v_comcode; --要保证只返回一行数据

insert into user(id,name,comcode) values(p_id,p_name,v_comcode);

end;


差不多就这样了
leiru 2008-10-21
  • 打赏
  • 举报
回复
你那里有例子吗?帖一个出来啊。。
我今天刚看,不知道从哪里看起。。
sleepzzzzz 2008-10-21
  • 打赏
  • 举报
回复
给你参考一下:
declare
c Company.comname%type;
id int;
name varchar2(20);
cursor r_c is select comcode from Company where comname like '%上海%';
begin
open r_c;
loop
fetch r_c
into c;
exit when r_c%notfound;
id = 1;
name = 'zyf'; --id,name可改为传值方式.
insert into user(id,name,comcode) values(id,name,c);
end loop;
close r_c;
end;
cosio 2008-10-21
  • 打赏
  • 举报
回复
这个不难,很简单的存储过程!看一下例子就可以写出来!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧