2014-04-24 93 views
0

我在Oracle中运行此函数时遇到问题。我似乎无法弄清楚发生了什么事。我不断收到“SQL命令未正确结束18行”。我认为这与我的即时SQL有关,但我不完全肯定。有什么想法吗?即时SQL - 命令未正确结束

create or replace 
FUNCTION COMPARE_USER(
indexNumber IN varchar, 
firstName IN varchar, 
lastName IN varchar, 
email IN varchar, 
department IN varchar, 
userLocation IN varchar, 
userType IN varchar, 
active IN varchar 
) 
RETURN CHAR 
IS 
    tableName varchar(50) := 'TEST_USER'; 
    boolCheck char; 
    rowCount int; 

BEGIN 
    EXECUTE IMMEDIATE 
    'SELECT COUNT(*) FROM ' || tableName || 
    ' WHERE INDEX_NUMBER = ' || indexNumber || 
    ' AND FIRST_NAME = ' || firstName || 
    ' AND LAST_NAME = ' || lastName || 
    ' AND EMAIL = ' || email || 
    ' AND DEPARTMENT = ' || department || 
    ' AND USER_LOCATION = ' || userLocation || 
    ' AND USER_TYPE = ' || userType || 
    ' AND ACTIVE = ' || active 
    INTO rowCount; 

    IF rowCount = 0 Then 
    boolCheck := 'N'; 
    Else 
    boolCheck := 'Y'; 
    End If; 
RETURN boolCheck; 
END COMPARE_USER; 

回答

0

是,尝试重新编写EXECUTE IMMEDIATE语句,如下所示:

EXECUTE IMMEDIATE 
    'SELECT COUNT(*) FROM ' || tableName || 
    ' INTO rowCount' 
    ' WHERE INDEX_NUMBER = ' || indexNumber || 
    ' AND FIRST_NAME = ' || firstName || 
    ' AND LAST_NAME = ' || lastName || 
    ' AND EMAIL = ' || email || 
    ' AND DEPARTMENT = ' || department || 
    ' AND USER_LOCATION = ' || userLocation || 
    ' AND USER_TYPE = ' || userType || 
    ' AND ACTIVE = ' || active 
相关问题