2010-12-03 4 views
1

Je suis en train de créer une procédure stockée, mais en me donnant une erreur: Sous-requête renvoie plus de 1 ligne pour la requête ci-dessous. Cela peut être fait en utilisant des curseurs, mais existe-t-il d'autres moyens d'exécuter directement cette requête dans des procédures stockées sans utiliser de curseurs car il existe plusieurs requêtes de ce type que j'ai besoin d'ajouter dans une procédure stockée pour plusieurs tables.erreur de procédure stockée: sous-requête renvoie plus de 1 lignes

Requête: -

UPDATE ipcc_patent_ipc_class 
SET assignee_type = (
SELECT IF(ipcc_patent_master.assignee_type='$ipcc_config_param[0]',$ipcc_config_value[0],IF(ipcc_patent_master.assignee_type='$ipcc_config_param[1]',$ipcc_config_value[1],null)) 
FROM ipcc_patent_master 
WHERE ipcc_patent_ipc_class.patent_id = patent_uid); 

Mais cette requête fonctionne pour le champ multiple: -

UPDATE ipcc_patent_ipc_class 
SET geographies_id=(
    SELECT ipcc_geographies.geographies_uid 
    FROM ipcc_patent_master,ipcc_geographies 
    WHERE ipcc_patent_master.geographies = ipcc_geographies.geographies 
    AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid 
), 
jurisdictions_id =(
    SELECT ipcc_jurisdictions.jurisdisctions_uid 
    FROM ipcc_patent_master,ipcc_jurisdictions 
    WHERE ipcc_patent_master.jurisdictions = ipcc_jurisdictions.jurisdictions 
    AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid 
), 
country_code_id =(
    SELECT ipcc_country_code.country_code_uid 
    FROM ipcc_patent_master,ipcc_country_code 
    WHERE ipcc_patent_master.country_code= ipcc_country_code.country_code 
    AND ipcc_patent_ipc_class.patent_id = ipcc_patent_master.patent_uid 
); 
+0

Pouvez-vous citer l'erreur exacte et SQL exacte avec laquelle vous essayez * * créer le SP? – Unreason

Répondre

1

Ajouter plusieurs termes à votre clause de sous-requête WHERE pour le ramener à un enregistrement, ou ajouter un LIMIT clause à la même chose.

2

Ajouter une clause Limit dans votre sous-requête.

+0

Limite n'a pas résolu le problème car la même requête lors de l'exécution du script php ou du navigateur de requêtes mysql donne la sortie désirée en mettant à jour plusieurs lignes mais lorsqu'elle est ajoutée dans la procédure stockée donne l'erreur ci-dessus. – user529011

+0

Avez-vous mis la limite dans la mise à jour ou la sélection? Je soupçonne ce dernier. – symcbean

0

Je ne pense pas que vous ayez besoin d'une sous-requête ici. Vous pouvez référencer plusieurs tables directement dans la requête UPDATE:

http://dev.mysql.com/doc/refman/5.0/en/update.html

+0

J'ai ajouté une condition dans une requête select..Comment cela pourrait-il être possible en utilisant la mise à jour ??? – user529011

0

Problème résolu ... pour la sous-requête (instruction SELECT), alias était absent pour patent_uid qui conduisent à cette erreur. Après avoir entré le nom de la table comme alias, il a commencé à travailler correctement dans la procédure stockée ..

Merci les gars pour votre aide ... genre

Questions connexes