Ralat Rentetan Petikan Dolar Tidak Ditamatkan Diselesaikan dengan -- Anotasi angsa
Percubaan untuk mencipta fungsi PostgreSQL menggunakan Goose menemui "dolar yang tidak ditamatkan ralat rentetan yang dipetik. Kod fungsi melibatkan binaan gelung, semakan bersyarat dan blok pengecualian terhad, yang memperkenalkan koma bernoktah dalam penyataan.
Penjelasan
Dokumentasi Goose menentukan SQL yang kompleks itu pernyataan yang termasuk koma bertitik mesti ditandakan dengan anotasi khas -- goose StatementBegin dan -- goose StatementEnd. Anotasi ini menghalang Goose daripada mengubah suai SQL dengan cara yang mencetuskan ralat dengan pustaka pangkalan data pq.
Penyelesaian
Untuk menyelesaikan ralat, ubah suai kod fungsi untuk disertakan anotasi seperti berikut:
CREATE OR REPLACE FUNCTION add_userlocation(user_id INT, location_id INT) RETURNS VOID AS -- +goose StatementBegin $BODY$ BEGIN LOOP UPDATE userslocations SET count = count+1 WHERE userid = user_id AND locationid = location_id; IF found THEN RETURN; END IF; BEGIN INSERT INTO userslocations(userid,locationid, count) VALUES (user_id, location_id, 1); RETURN; EXCEPTION WHEN unique_violation THEN END; END LOOP; END; -- +goose StatementEnd $BODY$ LANGUAGE plpgsql;
Dengan menganotasi permulaan dan akhir pernyataan kompleks, Goose akan mengendalikan pemprosesan SQL dengan sewajarnya, menghalang perpustakaan pq daripada menghadapi ralat rentetan yang tidak ditamatkan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Unterminated Dollar-Quoted String\' dalam Fungsi PostgreSQL Menggunakan Goose?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!