当前位置:首页 » 编程语言 » oraclesql拼接字符

oraclesql拼接字符

发布时间: 2024-07-30 01:52:06

‘壹’ 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;

‘贰’ SQL怎么拼接字符串

不同的数据库,相应的字符串拼接方式不同,通过对比加深一下记忆。

一、MySQL字符串拼接

1、CONCAT函数

语法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字符串,定长与不定长均可以

连接两个字符串

(2)oraclesql拼接字符扩展阅读

字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。

字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“a”,s[10]="j"。

而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符串函数的应用

1、连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

例:concat(‘11’,'aa’)='11aa’;

2、求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

例:(‘abdag’,2,3)=’bda’

3、删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:=’abcde’;delete(s,2,3);结果s:=’ae’

4、插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置

例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’

5、求字符串长度 length(s) 例:length(‘12abc’)=5

在ASP中 求字符串长度用 len(s)例: len("abc12")=5

6、搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.

例:pos(‘ab’,’12abcd’)=3

7、字符的大写转换。Upcase(ch) 求字符ch的大写体。

例:upcase(‘a’)=’A’

8、数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.

例:str(12345,s); 结果s=’12345’

9、数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数,第三个参数也可不传

例:val(‘1234’,x,I);结果 x:=1234

‘叁’ ORACLE 存储过程中的....是什么意思如下 ' || '''' || 'yyyy-mm-dd' || '''' || '

|| 是字符串连接符号
'''' 四个单引号,第1,4个单引号是正常的单引号,第2个单引号是转义字符,第3个单引号,编译后想保留的单引号。
最终目的 就是to_char(a.txntimestamp, 'yyyy-mm-dd') 这样的格式
这里头不是直接写sql文,而是用字符串拼接成新的sql字符串。

‘肆’ sqlserver 在sql语句里字符串用什么拼接。我知道oracle是用 || 。

SQL中用+
如:
declare @s varchar(100)
declare @d varchar(16)
set @d = '2012/2/10'
set @s = 'select * from tablename where datafield = '" + @d + "'"

‘伍’ oracle 在PLSQL脚本中如何表名称与数字字符串拼接

使用plsql存储过程制造一个脚本如:

create or replace procere test_val

(etl_date varchar2, --时间或者数字变量

data out sys_refcursor ---存放数据

) as

s_sql varchar2(1000); --执行sql

begin

s_sql := 'SELECT A,B FROM tsalpludetail' || etl_date ;

--dbms_output.put_line(s_sql);----打印sql可以不需要

open data for s_sql; ---把结果集放入data

end test_val;

执行后,打开存储过程

至此完成

‘陆’ Oracle数据库的pl/sql编程问题:

看你的account_a + account_b,显然这两个字段是字符型,ORACLE如果是字符串拼接,是不能用+的,如果这两个字段是字符型,那么+应该修改为||。
所以,既然从这个语句可以看出account_a + account_b这两个字段是数字型,那么||进行字符串拼接的时候,要求左右都是字符型,才会正确。
所以,你的||右边,不是字符型。而是数字型。ORACLE应该用TO_CHAR来把数字型转化成字符型。
dbms_output.put_line('转账前总余额:'||to_char(account_a+account_b));
这两个分开写,上面的那个写法,输出的结果是在两行,而下面,会使输入结果在一行中。
而且如果直接使用put_line,括号内可以是数字型,而第二个,则是字符数字混合,而其拼接的符号两遍也是两种类型,必然出错。

‘柒’ oracle listagg 拼接的字符串给多少长度

listagg 是字符串连接的结果过长。
没有办法,这个函数的返回值是varchar2类型,你改不了。除非写存储过程,在pl、sql中,字符串长度可以达到32768,然后用一个clob来存。
超出的部分不截除掉倒是个办法,不过语句会复杂得多,性能也会下降。

热点内容
抗解压模拟器软件下载 发布:2024-11-26 03:27:33 浏览:932
python获取文件列表 发布:2024-11-26 03:18:28 浏览:221
减刑算法 发布:2024-11-26 03:18:27 浏览:181
微信登录忘记密码怎么办啊 发布:2024-11-26 03:15:31 浏览:107
编码与加密 发布:2024-11-26 03:07:45 浏览:872
苹果7照片怎么加密码 发布:2024-11-26 02:44:57 浏览:931
药网源码 发布:2024-11-26 02:39:28 浏览:875
手机忘记密码输什么数字解锁 发布:2024-11-26 02:23:10 浏览:338
phpthisstatic 发布:2024-11-26 02:03:56 浏览:527
忘记的志愿者账号和密码如何找回来 发布:2024-11-26 01:57:46 浏览:207