PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 35. PL/pgSQL - SQL �������� | Fast Forward | Next |
�����Լ�����һ��������������� PL/pgSQL ��ȷ��������������͡��κ���ʶ��Ϊ�������͵���佫����Ϊ SQL ����������ұ����͵������ݿ�����ִ�У��ڽ�������õ����κ� PL/pgSQL ���������滻֮����ˣ� ������˵��SQL INSERT��UPDATE���� DELETE ������ܱ���Ϊ�� PL/pgSQL ��䣬�������Dz�δ�ڴ���ȷ�г���
��һ����������/��¼��ֵ�����淽����
identIFier := expression;
��������������������еı��ʽ����һ�����͵������ݿ������ SQL SELECT �������ġ��ñ��ʽ�������ɵ�һ����ֵ��
������ʽ�Ľ���������ͺͱ����������Ͳ�һ�£� ���߱���������֪�ijߴ�/���ȣ��� char(20)���� ���ֵ�������ر�PL/pgSQL�������ý�����͵���������ͱ������͵����뺯��ת���� Ҫע����ǣ���������ֵ���ִ���ʽ�������뺯�����Խ��ܵ���ʽ�� ��ô���������ܵ����������뺯������������ʱ����
���ӡ�
user_id := 20; tax := subtotal * 0.06;
���ɶ���У���ֻ��һ�У���SELECT����Ľ�����Ը���һ����¼������ �����ͱ���������һ�������������б����������淽��ʵ�ֵģ�
SELECT INTO target select_expressions FROM ...;
����� target ������һ����¼������ �б���������һ���ö��ŷָ��ļ����ͼ�¼/���ֶε��б� select_expressions �������ʣ�ಿ�ֺ���ͨ SQL һ����
��ע���������� PostgreSQL ��ͨ��SELECT INTO����Ľ����Dz�һ���ģ� ���ߵ�INTOĿ����һ���´����ı� ����������� PL/pgSQL �������һ��SELECT �Ľ���д���һ������ôʹ�� CREATE TABLE ... AS SELECT �����
�����һ�л���һ�������б�����Ŀ�꣬��ôѡ������ֵ���辫ȷƥ��Ŀ��Ľṹ�� ����ͻ��������ʱ�������Ŀ����һ����¼��������ô���Զ����Լ����ó��������е������͡�
����INTO�Ӿ䣬ʣ�µ�SELECT������ͨ�� SQL SELECT������ȫһ���� ���������ʹ��SELECT��ȫ��������
INTO �Ӿ伸�����Գ����� SELECT �����κεط��� ϰ�������Ǹ��� SELECT ���棬��������д�������� ���߾��� FROM ֮ǰ — Ҳ����˵���� select_expressions �б�֮ǰ����֮��
�����������У����Ŀ�긳���ֵ�� �������ض��У���ô����һ�и���Ŀ�겢�����������С� ����ע�⣺����������ORDER BY������"��һ��"�Dz���ȷ�ġ���
INTO�Ӿ���Գ�����SELECT������ļ����κεط���
��һ�� SELECT INTO ���֮������Լ��������� FOUND ������ Section 35.6.5�����ж�һ����ֵ�Ƿ�ɹ��� Ҳ����˵����ѯ���ٷ���һ�С����磺
SELECT INTO myrec * FROM emp WHERE empname = myname; IF NOT FOUND THEN RAISE EXCEPTION 'employee % not found', myname; END IF;
Ҫ����һ����¼/�н���Ƿ�Ϊ�գ������ʹ�� IS NULL ���������������ʱ��û���κΰ취���ж��Ƿ��ж�����б�������������һ�����ӣ�����û�з����е������
DECLARE users_rec RECORD; BEGIN SELECT INTO users_rec * FROM users WHERE user_id=3; IF users_rec.homepage IS NULL THEN -- �û�û��������ҳ������"http://" RETURN 'http://'; END IF; END;
��ʱ������ϣ������һ�����ʽ����һ���������ȴ����������ͨ����Ϊ���Ǿ�������һЩ�������õĸ����õ��Dz��������ý��ֵ�ĺ������� Ҫ�� PL/pgSQL �������£� �����ʹ��PERFORM��䣺
PERFORM query;
�������ִ��һ�� query���Ҷ�������� query ��д������ƽ��д SQL SELECT ������һ���ģ� ֻ�ǰѿ�ͷ�Ĺؼ��� SELECT �滻�� PERFORM�� PL/pgSQL �ı�����ƽ��һ�������������С� ͬ�������������������һ�У���ô����ı��� FOUND ����Ϊ�棬���û�������У���Ϊ�١�
ע��: ���ǿ���ϣ��û��INTO�Ӿ��SELECTҲ��������������Ҫ�� ����Ŀǰ���Խ��ܵ�Ψһ�ķ�����PERFORM��
һ�����ӣ�
PERFORM create_mv('cs_session_page_requests_mv', my_query);
�㾭����ϣ�������PL/pgSQL���������ɶ�̬��� Ҳ������Щÿ��ִ�е�ʱ���漰��ͬ���ͬ�������͵���� ������������£�PL/pgSQL ��ͼΪ�����ִ�мƻ���һ����ͼ�����ٺ��ʡ� Ϊ�˴������������⣬�����ṩ�� EXECUTE ��䣺
EXECUTE command-string;
����� command-string ��һ�������ִ�������Ϊ text���ı��ʽ�����ִ�����Ҫִ�е���� ���ִ����ı��������ݸ� SQL ���档
���ر�ע���ڸ������ִ��ォ���ᷢ���κ� PL/pgSQL ���������� ��������ֵ�����ڹ��������ִ���ʱ�������ִ���
������������PL/pgSQL������ͬ�� һ����EXECUTE������е������ڷ������������ڲ���ֻ���ͱ���һ�Ρ� �෴���ڸ����ÿ�����е�ʱ�������һ�Ρ� �����ִ������ڹ����ﶯ̬�������Ա��ڶԸ��ֲ�ͬ�ı���ֶν��в�����
����SELECT����Ľ����EXECUTE����������ĿǰEXECUTE ���滹��֧��SELECT INTO����������û�а취��һ����̬������ SELECT �У� ʹ�ü� EXECUTE �����ȡ����� �������������ַ�������ʵ�����ȡ�����һ������ʹ���� Section 35.7.4 ��������FOR-IN-EXECUTE��ʽ�� ����һ���Ǻ� OPEN-FOR-EXECUTE һ�����α꣬���� Section 35.8.2 ��������������
��ʹ�ö�̬�����ʱ���㾭����Ҫ���ݵ����š����ǽ����Χ��ĺ������ڹ̶��ı��ķ�������Ԫ����Χ�� ����������ϵģ�û��ʹ����Ԫ����Χ�Ĵ��룬��ο� Section 35.2.1�� �����ڰ��ϴ���ת���ɸ�����Ľṹʱ�����ʡ���һЩ��������
Ҫ���뵽��������IJ�ѯ�еĶ�̬��ֵҲ��Ҫ����Ĵ��� ��Ϊ�����Լ����ܰ��������ַ��� һ�����ӣ������ر�˵��֮�⣬�������Ƕ�������ʹ������Ԫ����Χ����
EXECUTE 'UPDATE tbl SET ' || quote_ident(columnname) || ' = ' || quote_literal(newvalue) || ' WHERE ...';
���������ʾ�˺��� quote_ident(text) �� quote_literal(text) ��ʹ�á� Ϊ�˰�ȫ�������ֶκͱ��ʶ���ı���Ӧ�ô��ݸ����� quote_ident�� ��Щ������ֵ�ı����������ֵ�ڹ������̬�����ִ���Ӧ�����ı��ִ�����ôӦ�ô��ݸ� quote_literal�� �����������ȡ���ʵIJ���������ı���Χ�ڵ���˫�����ﲢ�Ҷ��κ�Ƕ�����е������ַ����к��ʵ����ݴ���
��ע����Ԫ����Χֻ��Χ�̶��ı����á��������������������������ӣ��Ǿ�̫�����
EXECUTE 'UPDATE tbl SET ' || quote_ident(colname) || ' = $$' || newvalue || '$$ WHERE ...';
��Ϊ��� newvalue ������������$$����ô��δ������ë���ˡ� ͬ����������ܳ�������ѡ�õ��κ���Ԫ����Χ�ָ����ϡ� ��ˣ�Ҫ�밲ȫ�ذ�Χ���Ȳ�֪�����ı���������ʹ�� quote_literal��
��̬����� EXECUTE ��һ������������� Example 35-5 � �������������ִ����һ�������µĺ����� CREATE FUNCTION ���
�кü��ַ��������ж�һ�������Ч������һ��������ʹ�� GET DIAGNOSTICS��������ʽ���£�
GET DIAGNOSTICS variable = item [ , ... ] ;
���������������Ǽ���ϵͳ״̬��ʶ����ÿ�� item ��һ���ؼ��֣���ʾһ����Ҫ������ض�������״ֵ̬���ñ���Ӧ�ú�Ҫ���յ���ֵ������ͬ���� ��ǰ���õ�״̬���� ROW_COUNT�� ���һ������ SQL ����� SQL �������е��������� RESULT_OID�����һ�� SQL �����������һ�е� OID����ע�� RESULT_OID ֻ����һ��INSERT����֮������á�
һ�����ӣ�
GET DIAGNOSTICS var_integer = ROW_COUNT;
����һ���ж�����Ч���ķ�����һ������Ϊ boolean ��������� FOUND�� FOUND��ÿ�� PL/pgSQL �����↑ʼ��Ϊ�١���������������ã�
һ��SELECT INTO����������һ�������� FOUND Ϊ�棬���û�з�����������Ϊ�١�
һ��PERFORM���������ɣ���������һ�У������� FOUND Ϊ�棬���û����������Ϊ�١�
�������Ӱ����һ�У���ôUPDATE��INSERT����DELETE������� FOUND Ϊ�棬���û������Ӱ����Ϊ�١�
FETCH������������������ FOUND Ϊ�棬 �������������Ϊ�١�
һ��FOR������������һ�λ��Σ������� FOUND Ϊ�棬����Ϊ�١������������������FOR�������ֱ��� ������FORѭ������¼����FORѭ�����Լ���̬��¼��FORѭ������ ֻ����FORѭ���˳���ʱ������� FOUND�� ��ѭ��ִ�е��ڲ���FOUND ����FOR����ģ� ������ѭ�����������ܱ���������ִ�ж��ġ�
FOUND ��ÿ�� PL/pgSQL ��ľֲ������� �����κ���ֻӰ�쵱ǰ�ĺ�����