动态sql中的引号问题 ‘ ‘‘ ‘‘‘ ‘‘‘‘

在写动态sql时,里面有一个单引号,两个单引号,三个单引号,四个单引号,也有更多,但是不常见。      

有基础,忘记的直接看最后一页的图片,找奇数个数引号对齐,然后两个转义一个

SELECT *
FROM ALL_TAB_PARTITIONS
WHERE partition_name = 'PART_20250628'

上述代码中,where后的判断语句用的单引号,单引号中的内容是区分大小写的。

写动态sql拆分成三个部分        partition_name = 'PART_V_DATE'

动态sql:

EXECUTE IMMEDIATE '
SELECT   count(1)
FROM     ALL_TAB_PARTITIONS
WHERE    table_name = ''DWA_SX_CITY_D_NEW_USERS''
AND      table_owner = ''ZB_DWA''
AND      partition_name = ''PART_'||V_DATE||'''' INTO V_COUNT;

 EXECUTE IMMEDIATE 是一个用于执行动态 SQL 语句的命令。

我喜欢叫他开启动态sql的标志,这个后面的动态sql内容就用单引号    '   '    来括住。

所以说下面这段代码就是sql的第一部分

'
SELECT   count(1)
FROM     ALL_TAB_PARTITIONS
WHERE    table_name = ''DWA_SX_CITY_D_NEW_USERS''
AND      table_owner = ''ZB_DWA''
AND      partition_name = ''PART_'


上述是第一部分

单引号中的内容可以理解为字符串,字符串的拼接就用  ||    

所以说第二部分就是      V_DATE的值

第三部分两个单引号开启动态sql:   '              内容            '       

这里面的内容就一个单引号,但是因为在动态sql的引号中,所以两个单引号转义为一个单引号。

我的读动态sql方法

一部分代码拿出来学习

-- 条件判断1  原始分区是否存在
        EXECUTE IMMEDIATE '
        SELECT   count(1)
        FROM     ALL_TAB_PARTITIONS
        WHERE    table_name = ''DWA_SX_CITY_D_NEW_USERS''
        AND      table_owner = ''ZB_DWA''
        AND      partition_name = ''PART_'||V_DATE||'''' INTO V_COUNT;

        IF V_COUNT != 1 THEN
        V_SQL := 'ALTER TABLE ZB_DWA.DWA_SX_CITY_D_NEW_USERS ADD PARTITION  PART_'||V_DATE||' VALUES LESS THAN ('''||V_DATE_A1||''')
                 TABLESPACE TBS_ZB_DWA';
        EXECUTE IMMEDIATE V_SQL;
        END IF;

        -- 条件判断2 - 原始数据是否存在
        EXECUTE IMMEDIATE  '
        SELECT   COUNT(*)
        FROM     ZB_DWD.DWD_D_USE_BASE_INFO
        WHERE    date_id ='''|| V_DATE ||'''
        AND      rownum < 2
        '
        into
        V_COUNT;

直接看   if   下面    V_SQL的内容 

V_SQL:=' 开启动态sql,看到单引号,直接找后面的奇数引号,中间内容先不管

V_SQL := 'ALTER TABLE ZB_DWA.DWA_SX_CITY_D_NEW_USERS ADD PARTITION  PART_'

||

V_DATE

||

' VALUES LESS THAN ('' ' || V_DATE_A1 || ' '' )         TABLESPACE TBS_ZB_DWA   ';

 (''' 表示字符串   ('

||V_DATE_A1|| 拼接日期值变量

''') 表示字符串   ')

有问题评论区 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值