當前位置:首頁 » 存儲配置 » 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 20:20:47 瀏覽:886
移動寬頻設置路由器怎麼設置密碼 發布:2024-10-05 20:03:30 瀏覽:105
微指令的編譯方法有哪一些 發布:2024-10-05 19:02:10 瀏覽:885
android離線定位 發布:2024-10-05 18:36:40 瀏覽:858
ipad4密碼忘記怎麼辦 發布:2024-10-05 18:36:07 瀏覽:237
黑莓加密天線 發布:2024-10-05 18:30:07 瀏覽:851
編程入行年齡 發布:2024-10-05 18:29:24 瀏覽:540
伺服器地址訪問不到 發布:2024-10-05 18:20:55 瀏覽:691
手機解鎖忘記密碼多少錢 發布:2024-10-05 18:14:25 瀏覽:787
linux亂碼問題 發布:2024-10-05 18:00:25 瀏覽:545