2014-05-21 2 views
0

if 식 내부에서 저장 프로 시저를 사용하려고하지만 작동하지 않습니다.저장 프로 시저를 if 식으로 사용

if 문 앞에 저장 프로 시저로 초기화 된 변수의 문제를 해결할 수 있지만 한 줄로는 왜 그럴 수 없는지 알고 싶습니다. 여기

코드입니다 ".. # 1305 - 존재하지 않는 기능 (...)를 sp_IsTableExists"

DELIMITER $$$$ 

DROP PROCEDURE IF EXISTS `sp_IsTableExists` 
$$$$ 
CREATE PROCEDURE `sp_IsTableExists`(IN ptablename VARCHAR(50)) 
BEGIN 
    SELECT CASE WHEN (select COUNT(*) 
    from information_schema.COLUMNS 
    where TABLE_SCHEMA = DATABASE() 
    and TABLE_NAME = ptablename) = 0 THEN false ELSE true END AS exist FROM DUAL; 
END; 
$$$$ 

DROP PROCEDURE IF EXISTS `sp_IsTableCreated` 
$$$$ 
CREATE PROCEDURE `sp_IsTableCreated`(IN ptablename VARCHAR(50)) 
BEGIN 
    IF (sp_IsTableExists(ptablename)) THEN 
    SELECT TRUE FROM DUAL; 
    ELSE 
    SELECT FALSE FROM DUAL; 
    END IF; 
END; 
$$$$ 

DROP PROCEDURE IF EXISTS `sp_IsTableCreated2` 
$$$$ 
CREATE PROCEDURE `sp_IsTableCreated2`(IN ptablename VARCHAR(50)) 
BEGIN 
    IF ( SELECT CASE WHEN (select COUNT(*) 
    from information_schema.COLUMNS 
    where TABLE_SCHEMA = DATABASE() 
    and TABLE_NAME = ptablename) = 0 THEN false ELSE true END AS exist FROM DUAL) THEN 
    SELECT TRUE FROM DUAL; 
    ELSE 
    SELECT FALSE FROM DUAL; 
    END IF; 
END; 
$$$$ 

준다 "sp_IsTableCreated ('Utilisateur이')로 전화를"호출.

"sp_IsTableCreated2 ('Utilisateur') 호출이 정상적으로 작동합니다.

감사합니다.

답변

0

IF(stored_code(param, param)) 형식의 SQL 코드를 작성하려면 stored_code이라는 오브젝트는 저장 프로 시저가 아닌 함수에 저장해야합니다.

특성 NOT DETERMINISTICREADS SQL DATA과 함께 표시 할 것과 같은 기능을 선언하는 것을 잊지 마십시오.

0

저장 프로 시저 대신 함수를 만들어야합니다.

use test; -- use your database 

delimiter $$$$ 
DROP FUNCTION IF EXISTS `sp_IsTableExists` $$$$ 
CREATE FUNCTION `sp_IsTableExists`(ptablename VARCHAR(50)) 
returns bool 
BEGIN 


    select COUNT(*) into @count 
    from information_schema.COLUMNS 
    where TABLE_SCHEMA = DATABASE() 
    and TABLE_NAME = ptablename ; 

    return @count <> 0; 
END; 
$$$$ 

-- usage: 
select sp_IsTableExists('tablename');