當前位置:首頁 » 存儲配置 » oracle存儲過程sqlin

oracle存儲過程sqlin

發布時間: 2022-07-19 03:56:58

❶ oracle 存儲過程提示這是生成的提示ORA-00933: sql 命令未正確結束 生成的在 在pL/sql下正常運行

正常,你的存儲過程中的sql語句不正確

❷ oracle 存儲過程sql語句

使用游標,在DELETE和UPDATE的時候用LOOP循環,就能知道每一次的TID的值了;
或者直接寫LOOP循環,把每一次的tid的值寫在一個字元串里,用逗號分開,也得用cursor

❸ oracle 存儲過程sql中in 參數怎麼傳入調試

右擊存儲過程,選擇
測試create
or
replace
procere
pd1(p_1
number,p_2
number,p_3
number)
is
v_sql
varchar2(4000);
begin
v_sql:='select
*
from
table
where
id
in('||p_1||','||p_2||','||p_3||')';
execute
immediate
v_sql;
end;

❹ 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';

❺ oracle sql 存儲過程

desc getmaxandsum
FUNCTION getmaxandsum RETURNS NUMBER

你原來那個已存在的東西, 是一個 FUNCTION
也就是一個 函數.

SQL> create or replace procere getmaxandsum

你新創建的, 是一個 procere

也就是一個 存儲過程.

函數 和 存儲過程. 之間, 不能重名.

你要刪除的話, 需要
SQL> drop procere getmaxandsum;

修改為

SQL> drop function getmaxandsum;

❻ oracle 存儲過程 sql中in變數問題

我理解樓主的意思是這樣的.這個靜態使用有問題.
如果就直接這樣執行的話,
select count(*) into v_count from t where type in(a);
應該是有問題的.
可以這樣嘗試一下:
a varchar2(N);
execute immediate 'select count(1) from t where type in('||a||')' into v_count ;
還要注意傳入的變數,引號別弄丟了...
應該是可以的,我沒有測試,很久沒有動過這些了.

❼ 關於oracle存儲過程中的sql拼接,大神進!!!

procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里調用時:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum

❽ oracle存儲過程循環執行SQL語句

實現方式錯了,批量移動數據應該使用Cursor,而不是像分頁那樣每次都查詢。
每次都查詢可能會導致重復數據。
正確方式應該是打開一個Cursor,循環Cursor來插入,使用計數器來控制每次COMMIT的行數:
declare
TYPE R_CURSOR IS REF CURSOR;
i number;
a1_cursor R_CURSOR;
a1_row A1%ROWTYPE;
begin
open a1_cursor FOR
select ID, NAME from A1;
i := 0;
loop
fetch a1_cursor
into a1_row;
exit when a1_cursor%notfound;
INSERT INTO A2 VALUES a1_row;
i := i + 1;
if i >= 5 then
commit;
i := 0;
end if;
end loop;
close a1_cursor;
commit;
end;

❾ java調用oracle存儲過程 關於sql裡面in函數參數的問題

調用存儲過程是java 把組合起來的字元串傳到資料庫後台操作,如果你in ( pkStagesPersonArray),傳到資料庫後台還是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你應該把pkStagesPersonArray 裡面的內容轉換成 '1330251','1336140' 再拼接起來

❿ 如何在oracle存儲過程中執行動態sql語句

給你一個案例對這些,使用execute immediate就可以了,存儲過程和語句塊也是一樣的,自己改一改,沒區別的。

語法格式
EXECUTEIMMEDIATEdynamic_string
[INTO{define_variable[,define_variable]...|record}]
[USING[IN|OUT|INOUT]bind_argument[,[IN|OUT|INOUT]bind_argument]...]
[{RETURNING|RETURN}INTObind_argument[,bind_argument]...];

1,操作DDL語句,這也是動態SQL的常用操作之一
如下所示使用動態SQL創建資料庫表:
DECLARE
l_dync_sqlVARCHAR2(100);
BEGIN
l_dync_sql:='CREATETABLEcux_dync_test(idNUMBER,creation_dateDATE)';
EXECUTEIMMEDIATEl_dync_sql;
END;
2,操作DML語句,使用USING子句可以按照順序將輸入的值綁定到變數,如果動態SQL只有單行輸出的話可以直接使用INTO來接收輸出值,如下所示。
DECLARE
l_dync_sqlVARCHAR2(100);
l_person_nameVARCHAR2(140);
l_ageNUMBER;
BEGIN
l_dync_sql:='SELECTperson_name,ageFROMcux_cursor_testWHEREperson_id=:1';
EXECUTEIMMEDIATEl_dync_sql
INTOl_person_name,l_age--使用into語句接手動態SQL的輸出,如果輸出多行則出錯
USING101;--給綁定變數賦值
dbms_output.put_line('PersonName:'||l_person_name);
dbms_output.put_line('Age:'||l_age);
END;
熱點內容
工業級安卓主板價格怎麼樣 發布:2024-10-07 14:07:57 瀏覽:625
編程先乘除 發布:2024-10-07 13:58:45 瀏覽:268
編譯內核時發生循環編譯 發布:2024-10-07 13:58:43 瀏覽:494
當下筆記本電腦什麼配置好 發布:2024-10-07 12:57:33 瀏覽:468
安卓倒車軌跡怎麼調 發布:2024-10-07 12:54:47 瀏覽:913
問道刷道隊伍怎麼配置 發布:2024-10-07 12:09:17 瀏覽:323
androidservice使用 發布:2024-10-07 12:00:01 瀏覽:261
樂視2安卓版本怎麼升級 發布:2024-10-07 11:51:11 瀏覽:696
方舟電腦版怎麼進入官方伺服器 發布:2024-10-07 11:09:32 瀏覽:807
百度雲快速上傳 發布:2024-10-07 10:52:25 瀏覽:482