说明

简单通过几个小例子展示使用普通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相关推荐

  1. oracle拆分分区语法详解大全_学习笔记:Oracle分区表 添加 删除 合并 删除 交换 拆分等分区表的操作案例...

    天萃荷净 Oracle分区表管理,记录关于Oracle分区表的管理案例:创建.删除.合并.拆分.交换.更改分区表的操作方法 1.添加创建分区表 1.1)增加分区(add partition) 语法是: ...

  2. web前端学习526-534(变量概述,变量的使用,变量语法扩展,变量命名规范,推荐Diagram Designer)

    文章目录 1 变量概述 1.1 什么是变量 2 变量的使用 1 声明变量 2 赋值 3 变量的初始化 案例:变量的使用 3 变量语法扩展 1 更新变量 2 同时声明多个变量 3 声明变量特殊情况 4 ...

  3. oracle 和mysql语法上的区别,Mysql和Oracle的一些语法区别

    作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...

  4. oracle语法和sql的区别吗,ORACLE和SQL语法区别归纳

    ORACLE和SQL语法区别归纳 数据类型比较 类型名称 Oracle SQLServer 比较 字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServ ...

  5. Oracle中如何查找未使用绑定变量的SQL语句?

    Oracle中如何查找未使用绑定变量的SQL语句? 利用V$SQL 视图的 FORCE_MATCHING_SIGNATURE 字段可以识别可能从绑定变量或 CURSOR_SHARING 获益的 SQL ...

  6. oracle 新建绑定变量,在Oracle中,绑定变量是什么?绑定变量有什么优缺点?

    ♣答案部分 绑定变量这节的内容较多,下面给出这节涉及到的关系图: (一)绑定变量的含义及优缺点 通常在高并发的OLTP系统中,可能会出现这样的现象,单个SQL的写法.执行计划.性能都是没问题的,但整个 ...

  7. mysql 查询绑定变量_MySQL高级特性——绑定变量

    从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率 介绍 当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型.服务器端收到这个S ...

  8. oracle中变量前加冒号_oracle变量的定义和使用【转】

    在程序中定义变量.常量和参数时,则必须要为它们指定PL/SQL数据类型.在编写PL/SQL程序时,可以使用标量(Scalar)类型.复合(Composite)类型.参照(Reference)类型和LO ...

  9. bool类型返回值_Python语法基础:高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

  10. sqlplus连接不上oracle,环境变量设置错误导致sqlplus 连接不上oracle

    碰到一个奇怪的问题:在操作系统用户下oracle 下,我用sqlplus / as sysdba 命令连接不上去,如下: [oracle@gridrac1 ~]$ export ORACLE_SID= ...

最新文章

  1. python中requests库的用途-python中requests.session的妙用
  2. BZOJ1503(Splay)
  3. java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
  4. IOS15的抽屉效果
  5. xp计算机关闭139端口,小编搞定xp系统电脑关闭139端口的图文方法
  6. pictureBox1.Image的获得图片路径的三种方法
  7. 北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理
  8. 你的数仓函数结果不稳定,可能是属性指定错了
  9. 用css和js写表单验证,使用javascript及正则表达式实现表单验证(CSS,js练习)
  10. PHP代码重用与函数编写
  11. Linux中,根目录下文件夹的含义
  12. c语言顺序存储构建一棵二叉树,C语言 数据结构堆排序顺序存储(升序)
  13. 撬动地球的GOOGLE,告诉你GOOGLE不能说的秘密
  14. linux打包解压工具,打包压缩、解压缩工具详解
  15. 【字体转换】快速实现繁简字体相互转换
  16. Unity3D学习笔记——RigidBody(刚体)
  17. Linux shell中进制转换
  18. 实体类转换DTO的方式
  19. 使用audacity生成单声道音频
  20. docker 搭建在线office--onlyoffice (一)

热门文章

  1. python调用通达信函数用户指标_最新最全通达信公式教程大全(函数-指标-实例)...
  2. php底部漂浮广告位代码,网站顶部底部(上下)悬浮(漂浮)广告位代码
  3. Appfuse 开发环境搭建
  4. 计算机控制环境下审计风险研究,计算机审计风险研究
  5. Qt QComboBox详解
  6. 传统企业连接互联网的五种方式
  7. CodeSmith注册错误的解决方法
  8. ZYNQ ucos-ii中使用lwip及usb
  9. isis宣告网络_ISIS协议及其配置
  10. java读取 文件_Java读取文件的简单实现方法