plsql菜鸟教程(plsql使用教程

PostgreSQL是在Unix和Linux操作系统(在NT平台上也可以在Cygnus上运行)平台上运行的免费开源关系数据库。 最初由美国加利福尼亚大学伯克利分校开发,最初作为演示系统发布,但随着时间的推移而分发,得到了很多实用化,并逐渐流行起来。 目前,版本已发展到7.3.3。

荣誉: 1999年获得Linux World杂志本年度“最佳数据库产品”称号。

2000年获得了Linux Journal杂志编辑评选的“最佳数据库”奖。

2003年,也就是最近再次获得了Linux Journal杂志编辑评选的“最佳数据库”奖。

2 .主要功能和特性支持SQL。 作为关系数据库,支持SQL89标准和某些SQL92功能。

有丰富的数据类型。 有些业务数据库中不提供许多数据类型。

面向对象。 包括面向对象的技术,如继承和类。

与典型的桌面数据库不同,它支持几乎没有大小限制的数据库,并支持性能稳定的大型数据库。

它易于集成web,为PHP、Perl等语言操作数据库提供了方便的界面。

事务处理。 对于其他免费数据库(如MySQL ),他提供了一些事务来满足业务领域的数据需求。

3 .数据类型

PostgreSQL支持丰富的数据类型,许多数据类型在商业数据库中不可用。 数值类型。 包括整数、任意精度、浮点型和序列型数值。

货币类型。 范围-21474836.48至21474836.47。

字符类型。 分为定长类型,不定长度有限制的类型和不定长度没有限制的类型。

二进制字符串。

日期和时间类型

布尔型。

几何类型。 包括点、线、四边形、路径、多边形和圆。

网络地址的类型。

位串的类型。 一个包含1和0的字符串。

对象标识符类型

数组类型。

4 .数据库局限性

参数名称的最大范围

数据库大小无限制

表大小16TB (所有系统)。

1个记录的大小为1.6GB

字段大小1GB

表记录数无限制

表字段数250-1600 (取决于字段的数据类型) )。

表索引无限制

事实上,不可能有无限制的情况。 支持16TB大小的表存储为多个文件,而不是单个文件,因此不限于操作系统。

4 .下载安装

可从http://www.postgresql.org网站下载。 虽然不具体说明如何安装,但是可以查看文档,也可以查看参考中的中文网站的文档。 这里谈谈安装中应注意的几个问题。

请注意,您不能通过root登录到Linux来操作数据库。 启动数据库服务除外。 请以root身份创建postgres用户,设置密码登录。

安装postgreSQL后,可能需要初始化数据库。 必须以postgres用户身份登录系统并运行initdb-pq lib=/usr/lib/pq SQL-pq data=/var/lib/pq sal

如果您的pqlib目录不同,则必须根据实际路径进行修改。 pqdata也是如此。

数据库用户是与Linux用户不同的概念,只有数据库用户可以与数据库交互,在postgres中登录到Linux,然后使用createuser添加用户,并使用dropuser删除用户

5 .常用命令

PostgreSQL数据库常规操作命令:

创建创建b数据库

创建创建用户数据库用户

Dropdb删除数据库

Dropuser删除数据库用户

PostgreSQL交互式PostgreSQL前端工具。 可用于操作数据库

Initdb初始化postgreSQL数据库

由于此处不介绍如何使用PostgreSQL数据库,因此也不详细介绍这些命令。 请参考手册的说明和帮助。 这里假设读者安装和初始化数据库,并使用psql和熟练的SQL交互处理数据。

PostgreSQL提供了多种语言的接口,包括c、c、Perl和Tcl。 本节主要介绍C/C如何连接到数据库、添加数据和执行查询。

1 .要连接c语言接口头文件libqp-fe.h,必须连接到连接参数-lpq (即libpq库)。

建立数据库连接函数pg conn * pq连接数据库(常数char * conn info )

pg conn * pqsetdblogin (常数char * p ghost,

常数char * pg port,

常数char * pg选项,

常数char * pg tty,

常数char * dbname,

常数char * log in,

常数char * pwd )

创建非块连接函数

PGconn *PQconnectStart(const char *conninfo)

PostgresPollingStatusType *PQconnectPoll(PQconn *conn)

执行查询函数

PGresult *PQexec(PGconn *conn,const char *query) 返回查询的结构集。

int PQntuples(const Pgresult *res) 返回查询结果里的记录个数。

int PQnfields(const Pgresult *res) 返回记录中的字段的个数。

char *PQfname(const Pgresult *res,int field_index)返回结构集中某一字段的名称。

Oid PQftype(const Pgresult *res, int field_index) 返回结构集中某一字段的数据类型。

char *PQgetvalue(const Pgresult *res,int tup_num, int field_index)

返回结构集中某一条记录中某一个字段的值。

这里只列举最常用的一些函数,具体说明可以参见文档。

大对象数据操作,主要使用下列函数在SQL语句中操作大对象数据。Oid lo_creat(PGconn *conn,

int mode)创建一个新的大对象.mode 是一个位掩码,描述新对象的不同属性

Oid lo_import(PGconn *conn,

const char *filename)把文件作为大对象导入数据库

int lo_export(PGconn *conn,

Oid lobjId, const char *filename)大对象导入出数据库,保存为文件

int lo_open(PGconn *conn,

Oid lobjId, int mode)打开一个现存的大对象

int lo_write(PGconn *conn, int fd,

const char *buf, size_t len)大对象写入数据

int lo_read(PGconn *conn, int fd,

char *buf, size_t len)从大对象读取数据

int lo_lseek(PGconn *conn, int fd,

int offset, int whence)对大对象数据进行查找

int lo_close(PGconn *conn, int fd)关闭大对象描述符

上面函数的具体介绍请参见 PostgreSQL v7.0文档 在这里就不详细介绍了。这里省略列举状态检查函数,参见参考文档。

使用C语言访问数据库的除了libpq库,还有其他如 libpqeasy,ecpg 等接口。

2.C++语言接口头文件 libpq++.h 连接需要的库位 pq++,连接参数是 -lpq++

libpq++ 类继承关系图

类简介

PgConnection成员函数

PgConnection(const char* conninfo)参数同下

Connect(const char* conninfo)同 PQconnectdb

Exec(const char* query)同 PQexec

ExecCommandOk(const char* query)运行命令并检查状态是否PGRES_COMMAND_OK

ExecTuplesOk(const char* query)运行查询并检查状态是否PGRES_TUPLES_OK

IntToString(int n)数字转换为字符串

ConnectionBad()连接是否失败

ErrorMessage()返回错误信息

DBName()同 PQdb

详细说明参见文档PgDatabase 的常用成员函数

PgDatabase(const char* conninfo)构造函数连接到数据库,跟 Pqconnectdb参数相同

Tuples()同 PQntuples();

CmdTuples()同 PQcmdTuples

Fields()同 PQnfields

FieldName(int field_num)同 PQfname

FieldNum(const char* field_name)同 PQfnumber

FieldType(int ield_num)

FieldType(const char* field_name)同 PQftype

FieldSize(int field_num)

FieldSize(const char* field_name)同 PQfsize

GetValue(int tup_num, int field_num)

GetValue(int tup_num, const char* field_name)同 PQgetvalue

GetIsNull(int tup_num, int field_num)

GetIsNull(int tup_num, const char* field_name)同 PQgetisnull

GetLength(int tup_num, int field_num)

GetLength(int tup_num, const char* field_name)同 PQgetlength

GetLine(char* string, int length)同 PQgetline

PutLine(const char* string)同 PQputline

EndCopy()同 PQendcopy

大对象操作使用 PgLargeObject 类来操作。

以 postgres 用户或者具有建立数据库用户权限的用户登录 Linux,先建立数据库。[zuojin@itpark85 zuojin]$createdb test_db

然后使用 psql 连接到数据库[zuojin@itpark85 zuojin]$psql test_db

连接到数据库建立表,如下图所示

 

插入测试用数据,如图:

 

(注意:psql中输入SQL语句要以”; “结束才执行,帮助命令是”\\?”,退出命令是”\\q”)。

1)C语言例子

#include #include int main() {

PGconn *conn;

PGresult *res;

char *pghost = NULL;

char *pgport =NULL;

char *pgoptions =NULL;

char *pgtty = NULL;

char *dbname =”test_db”;

/**数据库名*/

int i = 0,t = 0,s,k;

conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);

if (PQstatus(conn) == CONNECTION_BAD) {

fprintf(stderr,”Connection to database ‘%s’ failed!\\n”,dbname);

PQfinish(conn);

eturn 0;

}

res = PQexec(conn,”SELECT * FROM test”);

/**运行查询命令*/

if( PQresultStatus(res) != PGRES_TUPLES_OK) {

fprintf(stderr,”Exec Query Fauled!\\n”);

PQclear(res);

return 0;

}

i = PQntuples(res);

/**取得查询的结果的记录的数量*/

t = PQnfields(res);

/**取得字段数量*/

for(s=0; s

运行结果如图所示

 

2)C++例子

#include #include int main() {

char query_string[256]= “SELECT * FROM test;”;

PgDatabase data(“dbname = test_db”);

if (data.ConnectionBad()) {

cout <

运行结果如图所示

快三三期必中口诀s()同 PQcmdTuples

Fields()同 PQnfields

FieldName(int field_num)同 PQfname

FieldNum(const char* field_name)同 PQfnumber

FieldType(int ield_num)

FieldType(const char* field_name)同 PQftype

FieldSize(int field_num)

FieldSize(const char* field_name)同 PQfsize

GetValue(int tup_num, int field_num)

GetValue(int tup_num, const char* field_name)同 PQgetvalue

GetIsNull(int tup_num, int field_num)

GetIsNull(int tup_num, const char* field_name)同 PQgetisnull

GetLength(int tup_num, int field_num)

GetLength(int tup_num, const char* field_name)同 PQgetlength

GetLine(char* string, int length)同 PQgetline

PutLine(const char* string)同 PQputline

EndCopy()同 PQendcopy

大对象操作使用 PgLargeObject 类来操作。

以 postgres 用户或者具有建立数据库用户权限的用户登录 Linux,先建立数据库。[zuojin@itpark85 zuojin]$createdb test_db

然后使用 psql 连接到数据库[zuojin@itpark85 zuojin]$psql test_db

连接到数据库建立表,如下图所示

 

插入测试用数据,如图:

 

(注意:psql中输入SQL语句要以”; “结束才执行,帮助命令是”\\?”,退出命令是”\\q”)。

1)C语言例子

#include #include int main() {

PGconn *conn;

PGresult *res;

char *pghost = NULL;

char *pgport =NULL;

char *pgoptions =NULL;

char *pgtty = NULL;

char *dbname =”test_db”;

/**数据库名*/

int i = 0,t = 0,s,k;

conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);

if (PQstatus(conn) == CONNECTION_BAD) {

fprintf(stderr,”Connection to database ‘%s’ failed!\\n”,dbname);

PQfinish(conn);

eturn 0;

}

res = PQexec(conn,”SELECT * FROM test”);

/**运行查询命令*/

if( PQresultStatus(res) != PGRES_TUPLES_OK) {

fprintf(stderr,”Exec Query Fauled!\\n”);

PQclear(res);

return 0;

}

i = PQntuples(res);

/**取得查询的结果的记录的数量*/

t = PQnfields(res);

/**取得字段数量*/

for(s=0; s

运行结果如图所示

 

2)C++例子

#include #include int main() {

char query_string[256]= “SELECT * FROM test;”;

PgDatabase data(“dbname = test_db”);

if (data.ConnectionBad()) {

cout <

运行结果如图所示

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注