当前位置:首页 » 存储配置 » oracle存储过程for

oracle存储过程for

发布时间: 2022-07-31 12:09:17

A. oracle存储过程中提示 错误:PLS-00103: 出现符号 "FOR"在需要下列之一时

你妹,你那个语法是sql server的语法好伐。。。
oracle语法见下面
declare
cursor v_cur_tmp is
SELECT oc_date,dwbm,kmbm,bzbm,rowid FROM t_gfsindex_indexcontent;
begin
open v_cur_tmp;
loop
fetch v_cur_tmp into v_oc_date, v_cur_dwbm, v_cur_kmbm, v_cur_bzbm,cur_rowid;
exit when v_cur_tmp%NOTFOUND;
;
end loop;
close v_cur_tmp;
end;

B. oracle存储过程for in loop的问题

你写的太复杂了,begin
也用错了CREATE
OR
REPLACE
PROCEDURE
testForInLoop
is

w_name
varchar2;
begin

for
w_name
in
(select
col
from
work_oracle_test)
loop

begin

dbms_output.put_line(w_name);

end;

end
loop;
end
testForInLoop;

C. oracle存储过程for循环相减

一条语句可以解决,用不着for游标循环。

createtableM_TATTENDANCEDATA(TR_DATEchar(8),PAY_CARD_COUNTint);

insertintoM_TATTENDANCEDATAvalues(20120922,324);

insertintoM_TATTENDANCEDATAvalues(20120921,314);

insertintoM_TATTENDANCEDATAvalues(20120920,306);

insertintoM_TATTENDANCEDATAvalues(20120919,305);

insertintoM_TATTENDANCEDATAvalues(20120918,304);

selectTR_DATE日期,PAY_CARD_COUNT刷卡数,

PAY_CARD_COUNT-Lag(PAY_CARD_COUNT,1)OVER(orderbyTR_DATE)相差数,

round((PAY_CARD_COUNT-Lag(PAY_CARD_COUNT,1)OVER(orderbyTR_DATE))/

Lag(PAY_CARD_COUNT,1)OVER(orderbyTR_DATE)*100,2)相差比

fromM_TATTENDANCEDATAorderbyTR_DATE;

D. oracle存储过程循环怎么写

Oracle中有三种循环(For、While、Loop):
1、loop循环:

createorreplaceprocerepro_test_loopis
inumber;
begin
i:=0;
loop
i:=i+1;
dbms_output.put_line(i);
ifi>5then
exit;
endif;
endloop;
endpro_test_loop;


2、while循环:

createorreplaceprocerepro_test_loopis
inumber;
begin
i:=0;
whilei<5loop
i:=i+1;
dbms_output.put_line(i);
endloop;
endpro_test_loop;


3、for循环1:

createorreplaceprocerepro_test_foris
inumber;
begin
i:=0;
foriin1..5loop
dbms_output.put_line(i);
endloop;
endpro_test_for;

4、for循环2:

createorreplaceprocerepro_test_cursoris
userRowt_user%rowtype;
cursoruserRowsis
select*fromt_user;
begin
foruserRowinuserRowsloop
dbms_output.put_line(userRow.Id||','||userRow.Name||','||userRows%rowcount);
endloop;
endpro_test_cursor;

E. oracle 存储过程两个for循环 怎么写

这种情况必须定义行类型的变量来解决:
declare
row_data tb_student%ROWTYPE
for row_data in tb_student loop
update student st set st.class_name = row_data.class_name
where st.class_id = row_data.class_id
end loop;
但这样种循环更新效率确实很低,SQL是面向集合的运算,像你这种需求可以用一条更新SQL外加子查询来解决,不建议用循环来做。

F. Oracle存储过程及举例(几种参数情况的存储

create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');

insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');

insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');

insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');

insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---创建存储过程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('总人数:'||v_total);
end;
--准备
--线对scott解锁:alter user scott account unlock;
--应为存储过程是在scott用户下。还要给scott赋予密码
---alter user scott identified by tiger;
---去命令下执行
EXECUTE test_count;
----在ql/spl中的sql中执行
begin
-- Call the procere
test_count;
end;

create or replace procere TEST_LIST
AS
---是用游标
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍历游标,在打印出来
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同时执行另外一个存储过程(TEST_LIST中包含存储过程test_count)
end;
-----执行存储过程TEST_LIST
begin
TEST_LIST;
END;
---存储过程的参数
---IN 定义一个输入参数变量,用于传递参数给存储过程
--OUT 定义一个输出参数变量,用于从存储过程获取数据
---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
--这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。

---创建有参数的存储过程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
begin
test_param('1');
end;

default '0'

---创建有参数的存储过程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---创建存储过程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;

----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的电话号码:'||p_phonenumber);
END;
-----sql命令下,查询当前用户的存储过程或函数的源代码,
-----可以通过对USER_SOURCE数据字典视图的查询得到。USER_SOURCE的结构如下:

SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments

---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object

TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source

TEXT VARCHAR2(4000) Y Source text

SQL>
---查询出存储过程的定义语句
select text from user_source WHERE NAME='TEST_COUNT';
----查询存储过程test_paramINOUT的参数
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看当前的存储过程的状态是否正确,
---VALID为正确,INVALID表示存储过程无效或需要重新编译
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要检查存储过程或函数的依赖性,可以通过查询数据字典USER_DENPENDENCIES来确定,该表结构如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查询存储过程TEST_COUNT的依赖关系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';

G. oracle存储过程怎么写循环

写循环的操作方法和步骤如下:

1、第一步,编写存储过程的整体结构,然后定义变量,见下图。

H. Oracle存储过程游标for循环怎么写

  • 首先编写存储过程的整体结构,如下:

    create or replace procere test_proc is

    v_date date; --变量定义

    begin

    select sysdate into v_date from al;

    end test_proc;

I. oracle存储过程中循环for in是如何使用的

1、首先编写存储过程的整体结构,如下图所示定义变量。

J. oracle存储过程如何获取指定行的值,就像for循环中,获取第i行就get(i)即可

比如:
for cur in (select column1,column2 from table_name) loop
--your code here
--cur.column1,cur.column2 就是当前行的值

end loop;

不知道你是不是这个意思

热点内容
下沉算法 发布:2024-10-05 21:59:43 浏览:995
数据库管理系统的开发 发布:2024-10-05 21:58:02 浏览:139
人员最低配置方案怎么写 发布:2024-10-05 21:56:26 浏览:765
智邦国际服务器ip 发布:2024-10-05 21:47:37 浏览:596
python英文怎么读 发布:2024-10-05 21:47:02 浏览:145
魔兽世界退役服务器有什么用处 发布:2024-10-05 20:50:00 浏览:195
新车配置不符怎么投诉 发布:2024-10-05 20:49:00 浏览:389
编译的html文件 发布:2024-10-05 20:48:58 浏览:161
python自学网站 发布:2024-10-05 20:46:08 浏览:19
存储在rom中的数据当计算机断电后 发布:2024-10-05 20:43:46 浏览:10