PL/SQL 查询以检查行的长度

PL/SQL Query to check row's length

我在解决这个问题时遇到了一些麻烦。

我必须检查 table,是否有任何行超过 34 个字符的长度(为此,我使用 Lenght 命令使用查询的第一部分),如果找到, return 变量 'END_CNPJ$' 的错误(由查询的第二部分 'ENDERECO' 填充)因此用户可以看到哪一行的字符数超过 34 个。这段代码是否正确(可能不正确)?如果不是,我该如何解决?

SELECT 
  LENGTH(CONCAT (CONCAT (CONCAT(CONCAT (CONCAT (CONCAT (CONCAT (
                       '', T.TTIPO_LOGR), 
                         ''), T.TENDERE),
                           ''), T.NNRO_ENDER),
                             ''),T.TCOMPL_ENDER) ), 
  T.TTIPO_LOGR || ' ' || T.TENDERE || ', ' || T.NNRO_ENDER || ' ' || T.TCOMPL_ENDER || ' - ' || TMUNICI || ' CNPJ: ' || T.NCGC AS ENDERECO
   INTO CHARACTER_COUNT$, END_CNPJ$
                                FROM TBENDER T 
                                 WHERE T.CEMPRES = :ENDER_BLK.CEMPRES;
                                 
  IF CHARACTER_COUNT$ > 34 THEN
    MSG_ALERT_COSMO(' You exceeded 34 character for this address: ' || END_CNPJ$ );
    RAISE FORM_TRIGGER_FAILURE;
  END IF;                    

我希望我没有违反任何规则,昨天刚到这里:D

TIA

那实际上是 Oracle Forms,不是吗? raise form_trigger_failure:ender_blk 闻起来很香。

在那种情况下,唯一的缺点可能是块项目值的table中没有行的可能性(这将提高no_data_found)或两行或更多行(然后将引发 too_many_rows)。

除此之外,这个应该没问题。

不过,有点不清楚为什么你很好地连接了 END_CNPJ$ 的值(使用双管道 || 运算符)并为 [=16= 嵌套了那么多 concat 函数].

此外,您没有 post 整个触发器代码(缺少声明、begin-end 关键字,也许还有其他内容)。

但是,正如我所说,一般来说 - 没关系。