0

SQL で独自の関数を作成する際に問題があります。エラー #1064 - 10 行目 ('create function' のある行) で間違った構文が表示され、何が間違っているのかわかりません。

create table students (
id int primary key,
name varchar(30),
surname varchar(30),
class char(4),
born datetime,
grade varchar(10)
)

create function returnGrade
(@class char(4))
return varchar(10)
AS
BEGIN
declare @return varcahr(10)
@class = SUBSTRING(@class, 2, 1)
  SELECT @return = CASE @class
  WHEN '1' then 'first'
  WHEN '2' then 'second'
  WHEN '3' then 'third'
  WHEN '4' then 'fourth'
  ELSE 'unknown'
  END
return @return
END

PS 変数クラスは、「T3.A」、「T4.A」、「T4.B」などのようになります。

4

4 に答える 4

0

あなたはどのDBについて言及していないので、私はそれをSQL Serverと仮定しています。

コードにいくつかのタイプミスがあります。

訂正はこちら

create function returnGrade
(@class char(4))
returns varchar(10) -- returns not return
AS
BEGIN
declare @return varchar(10)   -- varchar not varcahr
set @class = SUBSTRING(@class, 2, 1)  -- set was missing
  SELECT @return = CASE @class
  WHEN '1' then 'first'
  WHEN '2' then 'second'
  WHEN '3' then 'third'
  WHEN '4' then 'fourth'
  ELSE 'unknown'
  END
return @return
END

上記のコードは正常にコンパイルされ、値も返されます。

select dbo.returngrade('A2')
于 2012-04-19T01:34:43.237 に答える
0

次のようにしてみてください。ステートメントに返品がありません。

create function returnGrade
(
    @class char(4)
)
returns varchar(10)
AS
BEGIN
    declare @return varchar(10)
    set @class = SUBSTRING(@class, 2, 1)
      SELECT @return = CASE @class
      WHEN '1' then 'first'
      WHEN '2' then 'second'
      WHEN '3' then 'third'
      WHEN '4' then 'fourth'
      ELSE 'unknown'
    END

    return @return
END
于 2012-04-19T00:29:11.073 に答える
0

あなたのコード: declare @return varcahr(10)

タイプミスと予約語の使用の両方。

declare @ret varchar(10)

于 2012-04-19T00:25:16.993 に答える
0

以下は私にとってはうまくいきます。

CREATE TABLE students
    (
      id INT PRIMARY KEY ,
      name VARCHAR(30) ,
      surname VARCHAR(30) ,
      class CHAR(4) ,
      born DATETIME ,
      grade VARCHAR(10)
    )

GO -- Added GO


CREATE FUNCTION returnGrade ( @class CHAR(4) )
RETURNS VARCHAR(10) -- Changed to RETURNS from RETURN
AS 
    BEGIN
        DECLARE @return VARCHAR(10) -- Corrected the typo varcahr
        SET @class = SUBSTRING(@class, 2, 1) -- Added SET
        SELECT  @return = CASE @class
                            WHEN '1' THEN 'first'
                            WHEN '2' THEN 'second'
                            WHEN '3' THEN 'third'
                            WHEN '4' THEN 'fourth'
                            ELSE 'unknown'
                          END
        RETURN @return
    END

GO
于 2012-04-19T03:24:49.883 に答える