【问题标题】:what is the error of this stored procedure这个存储过程的错误是什么
【发布时间】:2012-07-28 22:56:32
【问题描述】:

你好,我正在使用这个存储过程

DELIMITER $$
 DROP PROCEDURE IF EXISTS get_all_user_selected_children_of_preference$$

CREATE PROCEDURE get_all_user_selected_children_of_preference(
   IN entity_id INT,
   IN user_type INT,
   IN parent_id INT
)

BEGIN

     DECLARE profilepreferenceid INT;
     DECLARE inpreferenceid INT;
     DECLARE preference_parent_id INT;
     DECLARE prefvalue VARCHAR(50);
     DECLARE no_more_prefrences INT;
     DECLARE element_type INT;
     DECLARE preference_type INT;

     DECLARE cur CURSOR for  select ProfilePreferenceID,PreferenceParentID,PreferenceID,ProfilePreferenceValueAlias,ElementType,PreferenceType from xxxxx  WHERE PreferenceParentID=parent_id AND EntityID=entity_id AND UserType=user_type ;
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_prefrences=1;

     CREATE TEMPORARY TABLE IF NOT EXISTS temp_user_selected_preference_children(

          ProfilePreferenceID int(11) NOT NULL AUTO_INCREMENT,
          PreferenceIDTmp INT(11),
          PreferenceParentIDTmp INT(11),
          ProfilePreferenceValueTmp varchar(255),
          userProfileIdTmp INT(11),
          elementTypeTmp INT (11),
          PreferenceTypeTmp INT (11),
          PRIMARY KEY (ProfilePreferenceID)     
     );

          SET no_more_prefrences=0;
          OPEN cur;

             dept_loop:WHILE(no_more_prefrences=0) DO

                     FETCH cur INTO profilepreferenceid,preference_parent_id,inpreferenceid,prefvalue,element_type,preference_type;
                     IF no_more_prefrences=1 THEN
                        LEAVE dept_loop;
                     END IF;

                                     INSERT  INTO temp_user_selected_preference_children(ProfilePreferenceID,PreferenceIDTmp,PreferenceParentIDTmp,ProfilePreferenceValueTmp,userProfileIdTmp,elementTypeTmp,PreferenceTypeTmp)
                                        VALUES  (profilepreferenceid,inpreferenceid,preference_parent_id,prefvalue,entity_id,element_type,preference_type);

                                     CALL get_all_user_selected_children_of_preference(entity_id,user_type,inpreferenceid);

             END WHILE dept_loop;

          CLOSE cur;    

END$$
DELIMITER ;

我在 phpmyamin 中运行它,它运行成功。

然后我从 codeigniter 调用它

public function get_user_selected_all_sub_preferencs_of_preference($preference_id,$user_type,$profile_id)
{
    $this->db->query("SET max_sp_recursion_depth=1000");
    $this->db->query("CALL get_all_user_selected_children_of_preference(".$profile_id.",".$user_type.",".$preference_id.")");
    $data= $this->db->query("SELECT * FROM temp_user_selected_preference_children");
    $dara_arr=$data->result_array();

    $this->db->query("DELETE FROM temp_user_selected_preference_children WHERE userProfileIdTmp=".$profile_id."");

    if(is_array($dara_arr)&&count(array_filter($dara_arr))>0){
        return $dara_arr;
    }
    else
    {
        return FALSE;
    }
}   

然后它给出错误

A Database Error Occurred
Error Number: 1054

Unknown column 'PreferenceTypeTmp' in 'field list'

CALL get_all_user_selected_children_of_preference(65,2,1)

Filename: C:\xampp\htdocs\elephanti2\system\database\DB_driver.php

Line Number: 330

找不到这是什么。

在mysql控制台中,我描述表

请帮忙。提前致谢

【问题讨论】:

    标签: mysql codeigniter stored-procedures


    【解决方案1】:

    CREATE TABLE Syntax 的手册页所述:

    TEMPORARY 表仅对当前连接可见,并在连接关闭时自动删除。这意味着两个不同的连接可以使用相同的临时表名,而不会相互冲突或与现有的非TEMPORARY 同名表冲突。 (在删除临时表之前,将隐藏现有表。)

    因此,您从 MySQL 命令行客户端运行的 DESCRIBE 命令引用的表与 CodeIgniter 正在使用的表不同。

    由于存储过程使用CREATE TEMPORARY TABLE IF NOT EXISTS,它只会在该连接上不存在同名的一个表时创建一个新表:也许 CodeIgniter 之前创建了一个同名但具有不同列的表?

    您可能打算先删除任何现有表,然后执行简单的创建:

    DROP TEMPORARY TABLE IF EXISTS temp_user_selected_preference_children;
    CREATE TEMPORARY TABLE temp_user_selected_preference_children (
    -- etc.
    

    【讨论】:

    • 实际上没有 PreferenceTypeTmp ,这很好用。光标中的列数是否有限制
    • @KanishkaPanamaldeniya:游标可以获取底层查询可以返回的尽可能多的列,所以这不是问题所在。在我看来,它在没有 PreferenceTypeTmp 的情况下工作的事实只会强化我上面给出的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多