oracle存储过程拼接字符串
㈠ 怎样Oracle把多条记录的相同字段拼成一个字符串
select 别名 from(
select row_number()over(order by lv desc) id,name from
(
select level lv,replace(sys_connect_by_path(字段,','),',','') 别名from
(
select name,row_number()over(order by 字段) id from 查询结果
)
connect by prior id = id-1
)
)where id=1;
*************
测试log:
*************
[TEST@ORA1] sql>select * from test2;
NAM ID
--- ----------
aaa 234
bbb 786
ccc 879
[TEST@ORA1] SQL>select name from(
2 select row_number()over(order by lv desc) id,name from
3 (
4 select level lv,replace(sys_connect_by_path(name,','),',','') name from
5 (
6 select name,row_number()over(order by name) id from test2
7 )
8 connect by prior id = id-1
9 )
10 )where id=1;
NAME
--------------------------------------------------------------------------------
aaabbbccc
*************************
10g以上(含10g):
select replace(wm_concat(字段),',','') 别名 from 查询结果;
测试log:
[TEST@ORA1] SQL>select * from test2;
NAM ID
--- ----------
aaa 234
bbb 786
ccc 879
[TEST@ORA1] SQL>select replace(wm_concat(name),',','') name from test2;
NAME
---------------------------------------------------------------------------
aaabbbccc
---
以上,希望对你有所帮助。
㈡ Oracle 怎么把存储过程传过来的参数拼接成
给你一个 传递参数的例子
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procere created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procere successfully completed.
SQL>
㈢ oracle 存储过程 求助
详见文本中“--注:”后的注释
create or replace procere test_cjsql_z( /*in_sqlnr in clob,*/out_code in out varchar2,
out_mess in out varchar2) Authid Current_User IS
--注:创建存储过程test_cjsql_z,输入输出型参数out_code、out_mess
PRAGMA AUTONOMOUS_TRANSACTION; --注:自助事务处理
in_sqlnr clob;--注:声明clob类型变量
V_LENGTH NUMBER;--注:number是数值类型变量
V_NUMBER1 NUMBER;
V_NUMBER2 NUMBER;
V_BSF NUMBER; --标识附,标识SQL语句中最后CHR(10)的位置。
V_STEP NUMBER;
buffer VARCHAR2(4000);--注:varchar2(xx)是字符串类型变量,xx是长度
V_TEMPSQL VARCHAR2(4000);
V_LINESQL VARCHAR2(4000);
V_SQLERR VARCHAR2(255);
jb_err exception;--注:声明例外对象
amount INT;
--v_sql VARCHAR2(4000);
BEGIN
select sqlnr into in_sqlnr from t_sql where sql_id = '100475'; --取clob 字段
V_LENGTH := to_number(ceil(dbms_lob.getlength(in_sqlnr) / 2000)); --取lob长度
for i in 1 .. V_LENGTH loop
--循环次数
amount := 2000;--注:以2000为单位
dbms_lob.read(in_sqlnr, amount, (i - 1) * 2000 + 1, buffer); --提取lob
buffer := replace(buffer, chr(13), ''); --替换 回车
buffer := V_TEMPSQL || buffer;--注:拼接字符串
V_BSF := INSTR(buffer, CHR(10), -1, 1); --最后 换行 的位置
V_TEMPSQL := SUBSTR(buffer, V_BSF, length(buffer) - V_BSF + 1);--注:从buffer中截取字符串
buffer := SUBSTR(buffer, 1, V_BSF);
V_STEP := 1;
loop
V_NUMBER1 := INSTR(buffer, CHR(10), 1, V_STEP);
V_NUMBER2 := INSTR(buffer, CHR(10), 1, V_STEP + 1);
V_LINESQL := RTRIM(REPLACE(SUBSTR(buffer,
V_NUMBER1,
V_NUMBER2 - V_NUMBER1 + 1),
CHR(10),
''),
';');
EXIT WHEN V_LINESQL IS NULL; --V_LINESQL 为 null 跳出循环
BEGIN
-- v_sql := 'insert into hx_sjmx.test_zh values (V_LINESQL)';
-- EXECUTE IMMEDIATE v_sql;
EXECUTE IMMEDIATE V_LINESQL; --执行 V_LINESQL
EXCEPTION --注:FOR循环中的例外处理部分
WHEN OTHERS THEN
V_SQLERR := SUBSTR(SQLERRM, 1, 255); --例外
out_code := '2';--注:输出返回代码
out_mess := substrb(V_SQLERR || '-' || V_LINESQL, 1, 2000);--注:输出返回文本
raise jb_err;--注:抛出例外
END;
V_STEP := V_STEP + 1;
end loop;
end loop;
out_code := '1';--注:输出返回代码
out_mess := '执行成功!';--注:输出返回文本
commit;
exception--注:例外处理
when jb_err then--注:当出现自定义例外时
rollback;--注:回滚
when others then--注:其它情况
V_SQLERR := SUBSTR(SQLERRM, 1, 255);
out_code := '3';--注:输出返回代码
out_mess := V_SQLERR;--注:输出返回文本
rollback;--注:回滚
END test_cjsql_z;
㈣ Oracle 怎么把存储过程传过来的参数拼接成一个字符串
Oracle 怎么把存储过程传过来的参数拼接成一个字符串
你可以拼接'to_date(' || 字符串类型日期 || ‘,YYYY-MM-DD HH24:MI:SS)’ || .... 日期格式可根据需要调整
㈤ oracle plsql的存储过程中,类似' || chr(10) || ' 的语法意思
oracle中的||是拼接字符串的意思,你说的有时候是单引号有时候是双引号估计是因为外面用了单引号或双引号,所以需要用另外一种来消除歧义。
㈥ Oracle字符串的拆分和拼接
如果是固定的格式,那就好办,检测字段中的“,”分割成四段,然后按要求接起来。
使用函数好些,可以直接调用。
函数写好:已经测试过。
CREATEORREPLACEFUNCTIONjson_montage(JSONINVARCHAR2)RETURNVARCHAR2IS
In_JSONVARCHAR2(4096);
v_JSONVARCHAR2(4096)DEFAULT'{"comicPkgList":[{J1,J2,J4}],J3}';
v_J1VARCHAR2(4096);
v_J2VARCHAR2(4096);
v_J3VARCHAR2(4096);
v_J4VARCHAR2(4096);
v_splitVARCHAR2(10)DEFAULT',';
lenNUMBER(10)default0;
placeNUMBER(10)default2;
BEGIN
In_JSON:=JSON;
/*
原字符串:
{"IsSmsConfirm":false,"proctID":"MDSP3331111","autoReceive":false,"supCycle":1}
期望转换后的:
{"comicPkgList":[{"IsSmsConfirm":false,"proctID":"MDSP3331111","supCycle":1}],"autoReceive":false}
*/
In_JSON:=RTRIM(LTRIM(In_JSON));
place:=INSTR(In_JSON,v_split,2,1);
len:=place-1-1;
v_J1:=SUBSTR(In_JSON,2,len);
len:=INSTR(In_JSON,v_split,2,2)-place-1-0;
v_J2:=SUBSTR(In_JSON,place+1,len);
place:=INSTR(In_JSON,v_split,2,2);
len:=INSTR(In_JSON,v_split,2,3)-place-1-0;
v_J3:=SUBSTR(In_JSON,place+1,len);
place:=INSTR(In_JSON,v_split,2,3);
len:=LENGTH(In_JSON)-place-1;
v_J4:=SUBSTR(In_JSON,place+1,len);
v_JSON:='{"comicPkgList":[{'||v_J1||','||v_J2||','||v_J4||'}],'||v_J3||'}';
IFv_JSON='{"comicPkgList":[{J1,J2,J4}],J3}'THEN
v_JSON:='ERROR';
ENDIF;
RETURNv_JSON;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
NULL;
WHENOTHERSTHEN
RAISE;
ENDjson_montage;
/
㈦ ORACLE 存储过程中的....是什么意思如下 ' || '''' || 'yyyy-mm-dd' || '''' || '
|| 是字符串连接符号
'''' 四个单引号,第1,4个单引号是正常的单引号,第2个单引号是转义字符,第3个单引号,编译后想保留的单引号。
最终目的 就是to_char(a.txntimestamp, 'yyyy-mm-dd') 这样的格式
这里头不是直接写sql文,而是用字符串拼接成新的sql字符串。
㈧ 如何将ORACLE存储过程中SQL的结果集打印出来,并且按照一定的格式封装到一个字符串中呢
这就用上了递归的思想,思路如下,没有你的数据如果有问题你调试下
V_SQL='select * from (
select REPLACE(SYS_CONNECT_BY_PATH(a,','),',') , LEVEL from (
SELECT OBJECT_ID || ''|''||
OBJECT_NAME || ''|''||
PHASE_ID || ''|''||
BUSI_TYPE || ''|''||
BUSI_NAME || ''|''||
BUSI_SUBCLASS_CODE || ''|''||
BUSI_SUBCLASS_NAME || ''|''||
BUSI_CLASSIFI_CODE || ''|''||
BUSI_CLASSIFI_NAME || ''|''||
BRAND_TYPE || ''|''||
CODE_NAME || ''|''||
RULER_OPTI || ''|''||
RULER_CENT || ''|''||
DONE_DATE || ''|''||'';'' a
FROM KH.KF_IVR_BUSI_CALCULATE S WHERE S.PHASE_ID=' || V_MONTH ||
' AND S.OBJECT_ID=' || V_OP_ID || ')
START WITH ROWNUM =1
CONNECT BY PRIOR rn +1= rn ORDER BY LEVEL DESC )
WHERE ROWNUM < 2 ';