Below is a new stored procedure that I am trying to make for building a SQL with the supplied parameters.
1:DELIMITER $$ 2:CREATE PROCEDURE `Search_Code_Samples`( 3: IN search_words VARCHAR(300) 4: , IN multi_word_condition VARCHAR(3) 5: , IN language_id INT 6: , IN sample_type CHAR(1) 7:) 8: READS SQL DATA 9: COMMENT 'Prepares and executes SQL to find records according to the data provided.' 10:BEGIN 11: DECLARE Base_SQL VARCHAR(1500); 12: DECLARE Filter_Clause VARCHAR(3000); 13: DECLARE Final_SQL VARCHAR(5500); 14: DECLARE First_Instance CHAR(1); 15: DECLARE len_search_words INT; 16: DECLARE word_idx INT; 17: DECLARE last_pos INT; 18: DECLARE word_length INT; 19: DECLARE new_word varchar(200); 20: DECLARE Search_Clause VARCHAR(1000); 21: DECLARE this_Word varchar(200); 22: DECLARE no_more_rows INT default 0; 23: 24: -- First handle the list of search words 25: IF (multi_word_condition IS NULL OR multi_work_condition = '' OR multi_word_condition = ' ') THEN 26: SET multi_word_condition = 'AND'; 27: END IF; 28: IF (sample_type IS NULL) OR (sample_type = ' ') THEN 29: SET sample_type = 'A'; 30: END IF; 31: SET Base_SQL = 'select * from CodeSamples_View '; 32: SET Filter_Clause = ''; 33: SET First_Instance = 'Y'; 34: IF (search_words IS NOT NULL) AND (search_words <> '') AND (search_words <> ' ') THEN 35: -- Parse the list of search words by spaces 36: SET len_search_words = LENGTH(search_words); 37: SET word_idx = 1; 38: SET last_pos = 1; 39: CREATE TEMPORARY TABLE Temp_Word_List (Search_Word VARCHAR(200) NOT NULL); 40: WHILE (word_idx <= len_search_words) DO 41: IF (SUBSTRING(search_words, word_idx, 1) = ' ') THEN 42: SET word_length = word_idx - last_pos; 43: SET new_word = TRIM(SUBSTRING(search_words, last_pos, word_length)); 44: SET last_pos = word_idx; 45: IF (new_word <> '') THEN 46: INSERT INTO Temp_Word_List VALUES (new_word); 47: END IF; 48: END IF; 49: SET word_idx = word_idx + 1; 50: END WHILE; 51: -- Put in the very last word 52: IF (word_idx > last_pos) THEN 53: SET word_length = word_idx - last_pos; 54: SET new_word = TRIM(SUBSTRING(search_words, last_pos, word_length)); 55: IF (new_word <> '') THEN 56: INSERT INTO Temp_Word_List VALUES (new_word); 57: END IF; 58: END IF; 59: -- Generate the SQL clause for the search words. 60: DECLARE words_list CURSOR FOR SELECT Search_Word FROM Temp_Word_List; 61: DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = 1; 62: OPEN words_list; 63: REPEAT 64: FETCH words_list INTO this_Word; 65: IF (no_more_rows <> 1) THEN 66: IF (First_Instance = 'Y') THEN 67: SET First_Instance = 'N'; 68: ELSE 69: SET Filter_Clause = concat(Filter_Clause, multi_word_condition, ' '); 70: END IF; 71: SET Filter_Clause = concat(Filter_Clause, 'match(title,description) against(''', this_Word, ''') '); 72: END IF; 73: UNTIL (no_more_rows = 1) END REPEAT; 74: CLOSE words_list; 75: DROP TEMPORARY TABLE Temp_Word_List; 76: END IF; 77: 78: -- Language Id 79: IF (language_id IS NOT NULL AND language_id > 0) THEN 80: IF (First_Instance = 'Y') THEN 81: SET First_Instance = 'N'; 82: ELSE 83: SET Filter_Clause = concat(Filter_Clause, ' AND '); 84: END IF; 85: SET Filter_Clause = concat(Filter_Clause, 'language = ', cast(language_id as CHAR(4)), ' '); 86: END IF; 87: 88: -- Sample type 89: IF (sample_type IS NOT NULL AND sample_type <> 'A' AND sample_type <> '' AND sample_type <> ' ') THEN 90: IF (First_Instance = 'Y') THEN 91: SET First_Instance = 'N'; 92: ELSE 93: SET Filter_Clause = concat(Filter_Clause, ' AND '); 94: END IF; 95: SET Filter_Clause = concat(Filter_Clause, 'sample_type = ''', sample_type, ''''); 96: END IF; 97: 98: -- Construct the final SQL statement. 99: IF (Filter_Clause = '') THEN 100: SET Final_SQL = Base_SQL; 101: ELSE 102: SET Final_SQL = concat(Base_SQL, 'WHERE ', Filter_Clause); 103: END IF; 104: 105: -- Execute the constructed SQL Statement. 106: PREPARE search_statement FROM Final_SQL; 107: EXECUTE search_statement; 108:END; $$ When attempting to compile this procedure I get this error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE this_Word varchar(200); DECLARE no_more_rows INT default 0; DECLA' at line 59 This may indicate that there is something on or before line 59 that it does not like, but I cannot figure it out. I have tried everything including removal of the query and replacing the temporary table with a regular table. Maybe another pair of eyes can help me find this syntax error. Your help is greatly appreciated. Thanks. -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]