我遇到一些P-SQL语法问题。我已将代码示例缩减到最低限度。
以下作品:
CREATE OR REPLACE FUNCTION MyFunction(LINE_ID SMALLINT)
RETURN VARCHAR2 IS
tmp VARCHAR2(4000);
BEGIN
tmp := CAST(LINE_ID AS VARCHAR2);
RETURN(tmp);
END MyFunction;
/
但是,我需要将LINE_ID参数更改为NUMBER(5,0),之后以下操作无效:
CREATE OR REPLACE FUNCTION MyFunction2(LINE_ID NUMBER(5, 0))
RETURN VARCHAR2 IS
tmp VARCHAR2(4000);
BEGIN
tmp := CAST(LINE_ID AS VARCHAR2);
RETURN(tmp);
END MyFunction2;
/
Oracle SQL Developer 3.2.10.09中的错误消息是
错误(1,36):PLS-00103:遇到符号“(”,当期待一个符号时 以下内容:: =。 ),@%默认字符符号“:=” 取而代之的是“(”继续。
我应该如何撰写CAST
语句,以使其与NUMBER(5, 0)
而不是SMALLINT
一起使用?
同样,这不是原始代码,但我正在寻找一种解决方案,它不会偏离第二个版本太多,最好也不是另一个函数调用。 VARCHAR2
返回类型也很重要。
答案 0 :(得分:13)
您正在寻找的功能是TO_CHAR
:
tmp := TO_CHAR(LINE_ID);
答案 1 :(得分:3)
您无法为函数的参数指定NUMBER
精度和比例。只需声明如下:
CREATE OR REPLACE FUNCTION MyFunction2(LINE_ID NUMBER)
答案 2 :(得分:1)
问题不在您的CAST中,而是在您的参数定义中。来自documentation:
您可以声明受约束子类型的形式参数,如下所示:
DECLARE
SUBTYPE n1 IS NUMBER(1);
SUBTYPE v1 IS VARCHAR2(1);
PROCEDURE p (n n1, v v1) IS ...
但是你不能在形式参数声明中包含约束,如下所示:
DECLARE
PROCEDURE p (n NUMBER(1), v VARCHAR2(1)) IS ...