Plsql 在过程中使用参数
我需要创建一个过程,该过程每月和每年接收一个参数 在这个过程中,我需要一个查询来检索一些值,这些值必须考虑到接收到的参数Plsql 在过程中使用参数,plsql,parameters,oracle11g,Plsql,Parameters,Oracle11g,我需要创建一个过程,该过程每月和每年接收一个参数 在这个过程中,我需要一个查询来检索一些值,这些值必须考虑到接收到的参数 create or replace procedure GET_REVS(MONTH in VARCHAR2,YEAR in varchar2) is SELECT * FROM REVENUS_TABLE WHERE Y_CODE IN ('YEAR') AND M_CODE IN () 现在,M_代
create or replace procedure GET_REVS(MONTH in VARCHAR2,YEAR in varchar2) is
SELECT
*
FROM
REVENUS_TABLE
WHERE
Y_CODE IN ('YEAR')
AND M_CODE IN ()
现在,M_代码应该具有从年初到参数接收月份的值
例如,如果我收到一个4月份的in作为参数,我希望我的select像这样,M_代码在'1','2','3','4'
但是如果我收到月=3。。我需要“1”、“2”、“3”中的select to have和M_代码
那么,为了做到这一点,最好的方法是什么呢
非常感谢您可以将M_代码和月份都转换为数字并在运算符之间使用,或者只您可以将M_代码和月份都转换为数字并在运算符之间使用,或者只您可以执行以下示例之类的操作,以使您的过程更加动态
CREATE OR REPLACE PROCEDURE get_revs (
MONTH IN VARCHAR2,
YEAR IN VARCHAR2
)
IS
variable_name table_name%ROWTYPE;
v_sql VARCHAR2 (1000)
:= 'SELECT * FROM REVENUS_TABLE WHERE Y_CODE IN ('
|| MONTH
|| ')';
BEGIN
IF MONTH = 4 THEN
v_sql := v_sql || ' and M_CODE IN (''1'',''2'',''3'',''4'')';
END IF;
IF MONTH = 3 THEN
v_sql := v_sql || 'and M_CODE IN (''1'',''2'',''3'')';
END IF;
EXECUTE IMMEDIATE v_sql
INTO variable_name;
END;
您可以执行以下示例之类的操作,使您的过程更加动态
CREATE OR REPLACE PROCEDURE get_revs (
MONTH IN VARCHAR2,
YEAR IN VARCHAR2
)
IS
variable_name table_name%ROWTYPE;
v_sql VARCHAR2 (1000)
:= 'SELECT * FROM REVENUS_TABLE WHERE Y_CODE IN ('
|| MONTH
|| ')';
BEGIN
IF MONTH = 4 THEN
v_sql := v_sql || ' and M_CODE IN (''1'',''2'',''3'',''4'')';
END IF;
IF MONTH = 3 THEN
v_sql := v_sql || 'and M_CODE IN (''1'',''2'',''3'')';
END IF;
EXECUTE IMMEDIATE v_sql
INTO variable_name;
END;
这只是一个可以考虑的选择
这只是一个可以考虑的选择
关于_NUMBERM_代码关于_NUMBERM_代码非常感谢您的时间。它很好用。我怎样才能学到更多,并练习一些练习来了解更多关于pls/sql的知识?非常感谢您的时间。它很好用。我如何学习更多知识并练习一些练习来了解更多关于pls/sql的知识?
CREATE OR REPLACE PROCEDURE get_revs(month IN VARCHAR2, year IN VARCHAR2) IS
lv_in_clause VARCHAR2(100 CHAR);
p_ref sys_refcursor;
BEGIN
SELECT 'IN ('
||WMSYS.WM_CONCAT(A.NUM)
||')'
INTO lv_in_clause
FROM
(SELECT ''''
||LEVEL
||'''' NUM,
1 ID1
FROM DUAL
CONNECT BY LEVEL < to_number(MONTH)
)A
GROUP BY a.ID1;
OPEN p_ref FOR 'SELECT *
FROM revenus_table
WHERE y_code = '|| year
||' AND m_code '||lv_in_clause;
END;