http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html

39.3. 声明

块中使用的所有的变量必须在块的声明节中进行声明。(唯一的例外是,子一个For循环中,在一个整数范围内轮询的循环变量被自动认为是整型变量,而只For循环中,轮询一个游标的变量被自动声明为记录变量。)

PL/pgSQL 变量可以是任何SQL数据类型,如integer,varchar,还有char等。

下面是变量声明的一些个例子:

user_id integer;
quantity numeric(5);
url varchar;
myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;

变量声明的语法是:

name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := } expression ];

如果给出DEFAULT 子句,则在进入块的时候,该变量会被赋予此初始值。如果没有给定DEFAULT子句,在变量会被赋予SQL null值。如果指定了CONSTANT选项,在会防止变量在初始化后被更改,因此在块的范围内会保持为常量。COLLATE选项指定了一套为变量所用的编码集。如果指定了NOT NULL,则赋予该变量一个空值会导致运行时错误。所有声明为NOT NULL的变量必须有一个非空的缺省值。

一个变量的缺省值会在每次进入块的时候被评估和设定(不是仅仅在函数被调用时才执行)。因此,举个例子来说,给一个timestamp类型的变量赋缺省值now(),会导致在当前函数调用的时间被赋值给此变量,而不是此函数中预编译时候的值。

例子:

quantity integer DEFAULT 32;
url varchar := 'http://mysite.com';
user_id CONSTANT integer := 10;

PL/pgSQL学习笔记之五的更多相关文章

  1. PL/pgSQL学习笔记之二

    39.1.1 使用 PL/pgSQL的好处 SQL是 PostgreSQL和其他大多数关系型数据库作为查询语言而使用的语言.它可移植,并容易学习.但是SQL语句必须被数据库服务器逐条地执行. 这意味着 ...

  2. PL/pgSQL学习笔记之八

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 另外一种声明 PL/pgSQL 函数的方法是使用 returns ...

  3. PL/pgSQL学习笔记之七

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 如果一个PL/pgSQL函数声明了输出参数,输出参数被赋予$n名 ...

  4. PL/pgSQL学习笔记之四

    http://www.postgresql.org/docs/9.1/static/plpgsql-structure.html 39.2. PL/pgSQL 的结构 PL/pgSQL是一种块式结构的 ...

  5. PL/pgSQL学习笔记之三

    http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1.2. Supported Argument and Resul ...

  6. PL/pgSQL学习笔记之一

    开始 资料来源:http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1 概要: PL/pgSQL是一种可载入的过程语言 ...

  7. PL/pgSQL学习笔记之十一

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.4. Row 类型 name table_name%R ...

  8. PL/pgSQL学习笔记之十

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.3. 类型拷贝 variable%TYPE %TYPE ...

  9. PL/pgSQL学习笔记之九

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.2. ALIAS newname ALIAS FOR ...

随机推荐

  1. 嵌入式 hi3518平台检测网线是否插上

    /********************************** (C) COPYRIGHT ******************************* * File Name        ...

  2. Golang 做的几个跟性能有关的工具

    1.Vegeta https://github.com/tsenart/vegeta Vegeta 是一个万能的 HTTP 负载测试工具,提供命令行工具和一个开发包. 使用方法: $ vegeta a ...

  3. [转]linux之more命令

    转自:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示 ...

  4. jQuery对select标签的常用操作

    1.获取当前选中项的value. $("#selector").val(); 2.获取当前选中项的text. $("#selector").find(" ...

  5. WPF 简介

    简介 一.   WPF产生的背景 因为人们的生活水平不断提前,审美观也随着提升,而软件的应用发展水平目前无法赶上大家的审美观和使用要求:比如:像电影中的软件能够方便的使用,而且有动态的效果同时附加形象 ...

  6. [转载]关于CSDN, cnblog, iteye和51cto四个博客网站的比较与分析

    CSDN:http://blog.csdn.net/ cnblog: http://www.cnblogs.com/ iteye: http://www.iteye.com/blogs/ 51cto: ...

  7. dom cookie记录用户名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Fedora 16设置开机自启动程序与Ubuntu的区别

    Ubuntu设置开机自启动脚本的方法是:修改/etc/init.d/rc.local这个文件,添加需要启动的程序即可,相关函数如下: void SetSysAutoBoot() { ] = {}; ; ...

  9. git 和 svn的区别(转)

    英文原文:5 Fundamental differences between GIT & SVN,编译:外刊IT评论 如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机 ...

  10. C++11散列表

    [C++11散列表] 散列表对应于C++03中的hash_xxx,分为set和map两种 上述的类型将满足对一个容器类型的要求,同时也提供访问其中元素的成员函数: insert, erase, beg ...