【问题标题】:not able to use Instr in my PLSQL function无法在我的 PLSQL 函数中使用 Instr
【发布时间】:2022-11-30 21:56:40
【问题描述】:

我正在尝试在 PLSQL 中获得以下输出-

  1. 输入“hjbhy”,结果“y-Text”表示输入值的最后一个字母
  2. 输入“hvu3”,结果“3-ODD”表示最后一个字母+奇数/偶数。

    我的代码-

    ALTER FUNCTION [dbo].[fnLast_Char] (
    @pchar NVARCHAR(100) 
    ) RETURNS NVARCHAR(100)
    
    AS
    BEGIN
    
    DECLARE @mchar NVARCHAR(10)
    DECLARE @nchar NVARCHAR(10)
    
    @mchar = substr(@pchar, Length(@pchar),1)
    
    IF Instr('1,3,5,7,9', @mchar) >0 SET @nchar = '-ODD'
    IF Instr('2,4,6,8,0', @mchar) >0 SET @nchar = '-EVEN'
    
    ELSE
    @nchar = '-TEXT'
    END
    
    RETURN UPPER (@mchar) || (@nchar)
    END
    

    错误-“Instr”不是内置函数 必须声明标量变量@nchar

    我用谷歌搜索 Instr,我不明白,如果我们输入“sjfhu5”,则输出“5-ODD”。 instr我们可以检查奇数,偶数。但我无法在 func 中使用它。你能帮忙吗我用谷歌搜索了一切并观看了 youtube 视频,没有帮助

【问题讨论】:

  • 好吧,那不是 Oracle 也不是它的 PL/SQL。你使用哪个数据库?如果是 Oracle,则使用其语法。
  • 我在 plsql 中做。和 Instr 我们可以在 select 语句中使用。但是我们应该在 func 中使用吗?
  • 不,Littlefoot 指的是您的完整代码在 Oracle PL/SQL 中无效。从那些括号开始,内联 DECLARE,缺少分号......看来您根本没有使用 Oracle。也许是 SQL 服务器?请检查您使用的是什么 DBMS。请发布您收到的完整错误消息。
  • You asked this yesterday,得到了你接受的答案。那是给甲骨文的。看起来您正在尝试将其转换为...也许是 T-SQL?

标签: oracle plsql


【解决方案1】:

考虑这样的事情:检查MOD函数是否返回任何东西有效的(即输入字符串中的最后一个字符是数字)并查看它是奇数还是偶数。否则,MOD 将引发错误,这意味着输入字符串是文本.

SQL> CREATE OR REPLACE FUNCTION fn_last_char (pchar IN VARCHAR2)
  2     RETURN VARCHAR2
  3  IS
  4  BEGIN
  5     RETURN    SUBSTR (pchar, -1)
  6            || CASE
  7                  WHEN MOD (TO_NUMBER (SUBSTR (pchar, -1)), 2) = 0 THEN '-EVEN'
  8                  ELSE '-ODD'
  9               END;
 10  EXCEPTION
 11     WHEN VALUE_ERROR
 12     THEN
 13        RETURN SUBSTR (pchar, -1) || '-TEXT';
 14  END;
 15  /

Function created.

测试:

SQL> SELECT fn_last_char ('hjbhy') val_1, fn_last_char ('hvu3') val_2 FROM DUAL;

VAL_1      VAL_2
---------- ----------
y-TEXT     3-ODD

SQL>

【讨论】:

  • 谢谢,但它没有给出“y -TEXT”
  • 现在可以了;没有意识到你也想显示最后一个字符。
  • 谢谢你。这真的很有帮助。我正在使用标量值函数,但出现错误,因为“SUBSTR”不是可识别的内置函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多