oracle 绑定变量语法,Delphi使用绑定变量法操作Oracle
说明
简单通过几个小例子展示使用普通SQL操作数据库、绑定变量法操作数据库的语法区别
本文只是展示绑定变量的语法,还有更多值得研究的:
Oracle和SQL Server绑定变量的异同
绑定变量相比于普通SQL的优势
绑定变量在数据库底层的运行原理
普通SQL在数据库底层的运行原理
等等
参考文章
基础数据准备
在Oracle中创建用于测试的数据表,并插入2条测试数据
create table practice(uno varchar(8), uname varchar(20));
insert into practice values('no1', 'name1');
insert into practice values('no2', 'name2');
Delphi执行普通SQL查询
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, name, ConStr: string;
begin
sSql := 'select uname from practice where uno = ''no1'' ';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
//AdoQry.ExecSQL; //普通SQL查询的时候如果使用ExecSQL会报错
AdoQry.Open;
name := AdoQry.FieldByName('uname').AsString;
ShowMessage(name);
except
ShowMessage('普通SQL查询报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
Delphi绑定变量查询
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, name, ConStr: string;
begin
sSql := 'select uname from practice where uno = :no';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.Parameters.ParamByName('no').Value:= 'no2';
//AdoQry.ExecSQL; //绑定变量法更新时使用ExecSQL会报错
AdoQry.Open;
name := AdoQry.FieldByName('uname').AsString;
ShowMessage(name);
except
ShowMessage('绑定变量法查询报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
Delphi普通SQL更新
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, ConStr: string;
begin
sSql := 'update practice set uname = ''testnm'' WHERE uno = ''no1'' ';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.ExecSQL;
except
ShowMessage('普通SQL更新报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
Delphi绑定变量更新
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, ConStr: string;
begin
sSql := 'update practice '
+ set uname = case when :name_condition1 = ''condition'' then :name_result1 else :name_result2 end '
+ 'where uno = :no_condition1';
//如果是下面这样的,SQL中有; 那么就会导致执行报错:ORA-00911: 无效字符
//sSql := 'update practice '
// + 'set uname = case when :name_condition1 = ''condition'' then :name_result1 else :name_result2 end '
// + 'where uno = :no_condition1;';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.Parameters.ParamByName('name_condition1').Value:= 'condition';
AdoQry.Parameters.ParamByName('name_result1').Value:= 'result1';
AdoQry.Parameters.ParamByName('name_result2').Value:= 'result2';
AdoQry.Parameters.ParamByName('no_condition1').Value:= 'filter';
//实现对practice表中uno='filter'的记录进行有条件的更新
//AdoQry.Open; //绑定变量法更新时使用Open会报错
AdoQry.ExecSQL; //应该使用ExecSQL
except
ShowMessage('绑定变量法更新报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
【特别小心】如果使用绑定变量法的两个变量同名的话,会导致报错:“不正常的定义参数对象,提供了不一致或不完整的信息”,比如下面例程所展示的
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, ConStr: string;
begin
sSql := 'update practice set uname = :name where uname = :name'; //两个变量同名,都是:name,会导致报错
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.Parameters.ParamByName('name').Value:= 'name1';
//AdoQry.Open; //绑定变量法更新时使用Open会报错
AdoQry.ExecSQL; //应该使用ExecSQL
except
ShowMessage('绑定变量法更新报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
Delphi执行普通SQL插入
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, name, ConStr: string;
begin
sSql := 'insert into practice(uno, uname) values(''no4'', ''name4'')';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.ExecSQL;
//AdoQry.Open; //普通SQL插入新数据时使用Open会报错
except
ShowMessage('普通SQL插入报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
Delphi绑定变量插入
var
AdoConn: TADOConnection;
AdoQry: TADOQuery;
sSql, name, ConStr: string;
begin
sSql := 'insert into practice(uno, uname) values(:no, :name)';
ConStr := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=trade;Password=trade;Data Source=MINE' ;
AdoConn := TADOConnection.Create(nil);
AdoQry := TADOQuery.Create(nil);
try
try
AdoConn.ConnectionString := ConStr;
AdoConn.Open;
AdoQry.Connection := AdoConn;
AdoQry.SQL.Text := sSql;
AdoQry.Parameters.ParamByName('no').Value:= 'no3';
AdoQry.Parameters.ParamByName('name').Value:= 'name3';
AdoQry.ExecSQL;
//AdoQry.Open; //绑定变量法插入新数据时使用Open会报错
except
ShowMessage('绑定变量法插入报错');
end;
finally
AdoQry.Free;
AdoConn.Free;
end;
end;
oracle 绑定变量语法,Delphi使用绑定变量法操作Oracle相关推荐
- oracle拆分分区语法详解大全_学习笔记:Oracle分区表 添加 删除 合并 删除 交换 拆分等分区表的操作案例...
天萃荷净 Oracle分区表管理,记录关于Oracle分区表的管理案例:创建.删除.合并.拆分.交换.更改分区表的操作方法 1.添加创建分区表 1.1)增加分区(add partition) 语法是: ...
- web前端学习526-534(变量概述,变量的使用,变量语法扩展,变量命名规范,推荐Diagram Designer)
文章目录 1 变量概述 1.1 什么是变量 2 变量的使用 1 声明变量 2 赋值 3 变量的初始化 案例:变量的使用 3 变量语法扩展 1 更新变量 2 同时声明多个变量 3 声明变量特殊情况 4 ...
- oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别
作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...
- oracle语法和sql的区别吗,ORACLE和SQL语法区别归纳
ORACLE和SQL语法区别归纳 数据类型比较 类型名称 Oracle SQLServer 比较 字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServ ...
- Oracle中如何查找未使用绑定变量的SQL语句?
Oracle中如何查找未使用绑定变量的SQL语句? 利用V$SQL 视图的 FORCE_MATCHING_SIGNATURE 字段可以识别可能从绑定变量或 CURSOR_SHARING 获益的 SQL ...
- oracle 新建绑定变量,在Oracle中,绑定变量是什么?绑定变量有什么优缺点?
♣答案部分 绑定变量这节的内容较多,下面给出这节涉及到的关系图: (一)绑定变量的含义及优缺点 通常在高并发的OLTP系统中,可能会出现这样的现象,单个SQL的写法.执行计划.性能都是没问题的,但整个 ...
- mysql 查询绑定变量_MySQL高级特性——绑定变量
从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率 介绍 当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型.服务器端收到这个S ...
- oracle中变量前加冒号_oracle变量的定义和使用【转】
在程序中定义变量.常量和参数时,则必须要为它们指定PL/SQL数据类型.在编写PL/SQL程序时,可以使用标量(Scalar)类型.复合(Composite)类型.参照(Reference)类型和LO ...
- bool类型返回值_Python语法基础:高级变量类型
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- sqlplus连接不上oracle,环境变量设置错误导致sqlplus 连接不上oracle
碰到一个奇怪的问题:在操作系统用户下oracle 下,我用sqlplus / as sysdba 命令连接不上去,如下: [oracle@gridrac1 ~]$ export ORACLE_SID= ...
最新文章
- python中requests库的用途-python中requests.session的妙用
- BZOJ1503(Splay)
- java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
- IOS15的抽屉效果
- xp计算机关闭139端口,小编搞定xp系统电脑关闭139端口的图文方法
- pictureBox1.Image的获得图片路径的三种方法
- 北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理
- 你的数仓函数结果不稳定,可能是属性指定错了
- 用css和js写表单验证,使用javascript及正则表达式实现表单验证(CSS,js练习)
- PHP代码重用与函数编写
- Linux中,根目录下文件夹的含义
- c语言顺序存储构建一棵二叉树,C语言 数据结构堆排序顺序存储(升序)
- 撬动地球的GOOGLE,告诉你GOOGLE不能说的秘密
- linux打包解压工具,打包压缩、解压缩工具详解
- 【字体转换】快速实现繁简字体相互转换
- Unity3D学习笔记——RigidBody(刚体)
- Linux shell中进制转换
- 实体类转换DTO的方式
- 使用audacity生成单声道音频
- docker 搭建在线office--onlyoffice (一)
热门文章
- python调用通达信函数用户指标_最新最全通达信公式教程大全(函数-指标-实例)...
- php底部漂浮广告位代码,网站顶部底部(上下)悬浮(漂浮)广告位代码
- Appfuse 开发环境搭建
- 计算机控制环境下审计风险研究,计算机审计风险研究
- Qt QComboBox详解
- 传统企业连接互联网的五种方式
- CodeSmith注册错误的解决方法
- ZYNQ ucos-ii中使用lwip及usb
- isis宣告网络_ISIS协议及其配置
- java读取 文件_Java读取文件的简单实现方法