當前位置:首頁 » 編程語言 » oracle存儲過程sql變數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle存儲過程sql變數

發布時間: 2022-04-01 07:14:23

❶ oracle存儲過程 調用變數

提供下思路,逐步測試看看,通過下面sql測試:若測試ok,則name變數類型或者賦值異常,若測試異常,則考慮函數實現是否有異常
for:
declare
begin
dbms_output.putline(max_int(1,'aaaaaaa'));
end;

❷ oracle存儲過程變數賦值報錯

ORACLE中字元串連接符是雙豎線「||」。
把代碼中的「+」換成「||」,另外,ddl語句不需要commit,去掉commit,代碼如下:
CREATE OR REPLACE PROCEDURE aaa_Zbflagexb(Vdwlx VARCHAR,
Vbzsj VARCHAR) IS
Vsql VARCHAR(8000);
Vtname VARCHAR(100);
Vtnameex VARCHAR(100);
BEGIN
Vtname := 'ZBFlag_' || Vdwlx;
Vtnameex := 'ZBFlagEx_' || Vdwlx;
Vsql := 'create table ' || Vtname ||
' (dwbh varchar(100),dwmc varchar(200),flag number(1),dwlx number) ';
EXECUTE IMMEDIATE Vsql;
--COMMIT;
END;

❸ oracle 如何在存儲過程中對變數進行模糊查詢

你這個sql可以用一個varchar 變數寫 當成字元串 不就可以拼進去變數了嗎 然後再執行這個拼好的字元串 EXECUTE IMMEDIATE
或是 在存儲過程中你這樣寫模糊查詢這塊 『%』『』||f_ComCode||『』『%』 在存儲過程中『代表轉譯 』『就相當於『

❹ oracle在寫存儲過程時怎樣將變數和字元串進行連接

變數直接寫,要連接字元串的話,用 || 這個符號,後面的字元串用單引號引!
例如 變數 V_str 字元串' select emp from table where '
連接後為:
------------------------------------------------
' select emp from table where '
|| V_str
------------------------------------------------
希望可以幫助到你!

❺ Oracle存儲過程where語句使用變數

create PROCEDURE p_update
(V_DQDM in varchar2(6))
as
begin
if length(V_DQDM)=6
then
update table1 ..... where dqdm=V_DQDM;
commit;
else
update table1 ..... where dqdm like V_DQDM||'%'
commit;
end if;
end p_update;

類似這么寫

❻ oracle的存儲過程里怎樣調用動態變數

實現思路:

第一步:先定義一個字元串,這個字元串SQL是由動態變數和其他的sql語句成分拼接組成。

第二步:直接執行execute immediate SQL;

備註:以上方法是oracle提供的動態執行方法語句,直接使用就可以。

VAR_DYNAMIC_SQL:='INSERTINTORP_COMFIRMED_EVENT_DETAIL(
EVENT_ID,--ID
TRANS_TIME,--交易時間
TRANS_TYPE,--交易類型
TRANS_PROVINCE,--開戶省份
CCE_CSTNO,--客戶號
CCE_CERTTYPE,--證件類型
CCE_CERTNO,--證件號
CCE_AMT,--交易金額
CCE_RISK_SCORE,--不處理的風險分值
CCE_PAYEE_ACC,--付款人賬號
CCE_PAYEE_NAME,--付款人姓名
CCE_REC_NODE,--收款人開戶行
CCE_REC_ACC,--收款人賬號
CCE_REC_NAME,--收款人姓名
RULE_NAME,--規則名稱
CCE_RULE_NOTE,--規則描述
SCORE_RANGE--處理後的風險分值
)select
EVENT_ID,
SYS_CREATION_DATE,
GET_NAME_BY_CODE(GET_TOTAL_EVENT_TYPE(T1.EVENT_TYPE,T1.USER_DEFINED_EVENT_TYPE),''eventType'')ASTRANS_TYPE,
--get_province(IP_COUNTRY,IP_CITY)ASCCE_TRANSTYPE,
get_vale_from_cd_p('||get_vale_from_cd1('13','5')||'),--開戶省份為自定義欄位
USER_ID,
'||get_vale_from_cd1('4','4')||',--證件類型為自定義欄位
'||get_vale_from_cd1('7','4')||',--證件號為自定義欄位要轉換成動態SQL
GET_AMT_BY_CURRENCY(AMOUNT_ORIGINAL,AMOUNT_CURRENCY),--通過匯率和幣種轉換
RISK_SCORE,
USER_ACCT_NUMBER,
'||get_vale_from_cd_g1(get_vale_from_cd_al)||',--付款人姓名
'||get_vale_from_cd1('11','5')||',--收款人開戶行自定義欄位需轉換成動態SQL
EXT_ACCT_NUMBER,
EXT_ACCT_OWNER_NAME,
NVL(POLICY_RULE_ID,''FALLBACK_RULE'')ASRULE_NAME,
SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''-'')+1),--描述
GET_SCORE_RANGE(RISK_SCORE)ASRISK_SCORE_RANGE
FROMEVENT_LOG_REALTIMET1
))';
executeimmediateVAR_DYNAMIC_SQL;

❼ 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語句

給你一個案例對這些,使用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;

❾ oracle存儲過程變數傳遞

是不是跟sql server一樣,不能用in 變數的形式,要直接寫成 in (1,2,3)的形式才行

❿ oracle 存儲過程是用什麼系統變數返回sql語句的執行結果的

DECLARE
v_cursor NUMBER;
v_stat NUMBER;
aa VARCHAR(100);
bb VARCHAR(100);
cc VARCHAR(100);
dd VARCHAR(100);
v_sql VARCHAR(200);
BEGIN
v_sql :='select * from aaa';
v_cursor := dbms_sql.open_cursor; --打開游標;
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析動態SQL語句;
dbms_sql.define_column(v_cursor, 1, aa,100); --定義列
dbms_sql.define_column(v_cursor, 2,bb, 100);
dbms_sql.define_column(v_cursor, 3,cc,100);
dbms_sql.define_column(v_cursor, 4, dd,100);
v_stat := dbms_sql.execute(v_cursor); --執行動態SQL語句。