当前位置: 代码迷 >> Oracle管理 >> oracle储存过程有关问题。需要传入一个id的串。id在数据库内定义为number。那么运行这个存储过程时如何定义这个id串
  详细解决方案

oracle储存过程有关问题。需要传入一个id的串。id在数据库内定义为number。那么运行这个存储过程时如何定义这个id串

热度:39   发布时间:2016-04-24 05:05:00.0
oracle储存过程问题。需要传入一个id的串。id在数据库内定义为number。那么运行这个存储过程时怎么定义这个id串?
--运行存储过程。
declare 
opentime varchar2(200);
closetime varchar2(200);
idstring varchar2(200);
counts number;
begin
opentime:='2012-07-15 18:00:00';
closetime:='2012-07-16 6:00:00';
idstring:='2818,2819,2822,2823,2824'; --在此处报无效数字错误。因为数据库中id是number型。却传入了一个字符串
pro_count(opentime,closetime,idstring,counts);
dbms_output.put_line(counts);
end;

--存储过程中用到idstring的地方。数据库中id为number类型的。

------解决方案--------------------
SQL code
-- 帖个例子给你:create or replace FUNCTION fun_getemails(i_user_ids VARCHAR2, i_cdate VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'D'))/***************************************************  **     功能:根据输入的用户ID(S)及日期得到相应的用户邮箱(查询user_info表)  **     备注:工作日与非工作日区分对待:如果是工作日(周一到周五),则得到相关用户ID的workday_email字段内容;  **           如果是非工作日(周六、日)则得到相关用户ID的weekend_email字段的内容  **     参数输入格式:'01636,00220' (表示获取用户ID为01636和00220的邮箱)  **   创建者:luoyoumou  ** 创建时间:2012.05.22  ****************************************************/RETURN varchar2 RESULT_CACHEIS  l_sql    VARCHAR2(1000);  l_emails VARCHAR2(200);  l_user_ids VARCHAR2(200);BEGIN  l_user_ids := ''''||replace(i_user_ids,',',''',''')||'''';  l_sql := 'SELECT LISTAGG(DECODE(:i_cdate,''1'',weekend_email,''7'',weekend_email,workday_email),'';'') WITHIN GROUP(ORDER BY userid) as emails FROM user_info ';  l_sql := l_sql || 'WHERE u_status=1 ' || 'AND (userid in('||l_user_ids||')' || ' OR parent_userid in('||l_user_ids||'))';  EXECUTE IMMEDIATE l_sql INTO l_emails USING i_cdate;  RETURN l_emails;EXCEPTION WHEN OTHERS  THEN  RETURN NULL;END;
------解决方案--------------------
考虑用数组 或者拆分传入的值

拆分值
SQL code
cursor c is select * from lampalarm_his where lampid in         (             select replace(regexp_substr(idstring,'[^,]+',1,level),',',' ')              from dual             connect by level<=length(idstring)-length(replace(idstring,',',''))+1        ) order by lampid;
代码迷推荐解决方案:oracle存储过程,http://www.daimami.com/search?q=177537
  相关解决方案