嵌入式SQL与动态SQL

Por*_*jim 6 sql oracle parameterized

我目前正在做一个*咳嗽*Oracle*咳嗽*数据库主题.讲师将介绍嵌入式SQL作为您使用其他语言(例如C,C++)与(Oracle)数据库交互的方式.

我自己做了一些数据库工作(在mysql上)我使用动态sql.

由于嵌入式SQL似乎仅限于几个Oracle和其他几个,所以这更像是锁定的尝试,还是嵌入式SQL中的真正价值?

编辑:我刚刚意识到,在PL/SQL课程结束后,本课程是正确的.

原始问题询问参数化SQL(现在用"动态sql"代替以改进问题).

旁白:我认为我买的约30美元的"SQL和关系理论"一书教我的不仅仅是这个数据库类.

Bil*_*win 10

嵌入式SQL在编译时进行解析.一个优点是你也可以在编译时捕获语法错误,这可以防止某些类型的令人尴尬的运行时错误.这也意味着SQL注入漏洞无法在运行时改变您的预期SQL语法.

现在几乎所有SQL程序员都将SQL放入字符串中,并在运行时解析这些字符串.这是动态SQL的原始定义.这也称为呼叫级接口(CLI).

因为以这种方式使用SQL是如此常见,所以"动态SQL"的新定义已成为常见用法,即人们将此术语用于基于应用程序逻辑和变量有条件地构建的SQL查询,而不是在其应用程序中修复了指定整个查询的字符串.

参数化查询是完全独立的区分.您可以将参数占位符放入嵌入式或动态SQL中.

对于它的价值,我不知道最近有谁使用嵌入式SQL(除了维护遗留应用程序架构).我甚至愿意和你的讲师争论他们正在教授无关紧要的,过时的技术.

  • Oracle 11g仍然支持各种SQL 预编译器.
  • IBM DB2 UDB 9.7支持一个名为的SQL预处理器PREP.
  • Microsoft SQL Server已弃用 MS SQL Server 2000之后对嵌入式SQL的支持.
  • 据报道,Sybase也已停止使用嵌入式SQL(但我找不到引用的引用).
  • PostgreSQL仍支持嵌入式SQL 的预处理程序ECPG.
  • MySQL从未支持嵌入式SQL.
  • 据我所知,SQLite不支持SQL预处理器.

这占据了RDBMS市场份额的绝大部分.