2012-04-19 3 views
0

SQL에서 자체 함수를 만드는 데 문제가 있습니다. 오류 # 1064가 발생합니다 - 10 행에 잘못된 구문 ('create function'이있는 행)이 있는데 무엇이 잘못 되었습니까?SQL 함수 오류 : 1064

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'등

+0

create table과 create 함수 사이에 'GO'를 추가하십시오. 또한,'return @return varcahr (10)'은'varchar (10)' –

+0

이되어야합니다. 나는 GO를 추가했고 "당신은 라인 9 번에 1064 오류가 있습니다."라는 메시지가 나타납니다. 함수 returnGrade를 만듭니다. . " – SukiCZ

답변

0

귀하의 코드 : declare @return varcahr(10)

오타 모두와 예약어 사용.

declare @ret varchar(10)

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 
+0

동일합니다. SQL은 'create function returnGrade'행을 통과 할 수 없습니다 : -/ – SukiCZ

0

SQL Server로 가정하는 DB를 언급하지 않았으므로.

코드에 몇 가지 오타가 있습니다.

여기 보정

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') 
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 
+0

이것은 "11 행"에서 "GO ..."근처에 "err"을 썼습니다. - / – SukiCZ