在Oracle中有PL / SQL,一种强大的命令式语言。 MySQL有什么类似的东西吗?
答案 0 :(得分:14)
虽然MySQL确实有类似的组件,但是,你不能在MySQL中使用PL \ SQL。 MS SQL Server使用的T-SQL也是如此。
MySQL上有大量文档at their website.
尽管我不想参考Yahoo Answers,但有一个很好的解释Here
您将看到PL \ SQL和T-SQL都是图灵完备的,并且可能提供更多功能。但MySQL有很多方法可以执行类似的任务。
以下是Yahoo Answers帖子的内容:
MySQL是一个多线程,多用户SQL数据库管理系统 (DBMS)1根据MySQL AB的说法,有超过1000万 安装。
所有专业都可以使用用于访问MySQL数据库的库 使用特定于语言的API编程语言。另外,一个 名为MyODBC的ODBC接口允许使用其他编程语言 支持ODBC接口与MySQL数据库通信, 如ASP或Coldfusion。 MySQL服务器和官方库是 主要在ANSI C中实现。
MySQL非常适合Web应用程序,并充当数据库 LAMP,MAMP和WAMP平台的组件 (Linux / Mac / Windows-Apache-MySQL-PHP / Perl ...以及开源漏洞 像Bugzilla这样的跟踪工具。它作为Web应用程序的受欢迎程度 与PHP的流行密切相关,这通常与PHP相结合 MySQL的。 PHP和MySQL是运行流行的必备组件 WordPress博客平台。
以下功能由MySQL实现,但不是由其他功能实现 RDBMSes:
- 多个存储引擎,允许您选择对应用程序中每个表最有效的引擎(在MySQL 5.0中, 存储引擎必须编译;在MySQL 5.1中,存储引擎可以 在运行时动态加载):o本机存储引擎(MyISAM, 猎鹰,合并,记忆(堆),联邦,档案,CSV,黑洞, 簇) - 合作伙伴开发的存储引擎(InnoDB,solidDB,NitroEDB,BrightHouse) - 社区开发的存储引擎
- 自定义存储引擎
- 提交分组,从多个连接收集多个事务,以增加每秒的提交次数。
注意:: MySQL是用C和C ++编写的。 SQL解析器使用yacc和 自制的词法分析器。描述一些内部文件的文件 代码的结构和编码指南可从中获得 MySQL网站。
SQL
SQL通常扩展为结构化查询语言,是一台计算机 用于检索和管理数据的语言 关系数据库管理系统,数据库模式创建和 修改和数据库对象访问控制管理。
SQL语言被细分为几个语言元素, 包括:
- 可能对架构和数据产生持久影响,或者可能控制事务,程序流,连接, 会话或诊断。
- 根据特定条件检索数据的查询。
- 可以生成标量值的表达式或包含数据列和行的表。
- 指定哪些条件可以评估为SQL三值逻辑(3VL)布尔值真值并且常用于 限制语句和查询的效果,或更改程序 流。
- 语句和查询的组成部分(在某些情况下是可选的)的条款
它在查询数据操作数据定义的概念下工作 交易控制
SQL:2003标准对所有部分进行了少量修改 SQL:1999,并正式引入了一些新功能,例如:1
- 与XML相关的功能
- 窗口功能
- 序列生成器,允许标准化序列
- 两种新列类型:自动生成的值和标识列
- 新的MERGE声明
- 对CREATE TABLE语句的扩展,以允许" CREATE TABLE AS"和"创建表格"
- 删除执行不力的" BIT"和" BIT VARYING"数据类型
<强> PL / SQL 强>
PL / SQL是Oracle公司基于服务器的专有程序扩展 SQL数据库语言。 (一些其他SQL数据库管理系统 提供类似于PL / SQL的语言。)它的语法非常类似于它 阿达
PL / SQL支持变量,条件,数组和异常。 从Oracle RDBMS版本8开始实现 包含与面向对象相关的功能。
底层SQL函数作为声明性语言。标准 SQL - 与某些函数式编程语言不同 - 不需要 将尾调用转换为跳转的实现。 SQL不容易 提供&#34;第一行&#34;和&#34;表的其余部分&#34;访问者,它不能 轻松执行一些构造,如循环。然而,PL / SQL作为一个 填补这些空白的图灵完整程序语言允许 Oracle数据库开发人员与底层关系进行交互 数据库以势在必行的方式。 SQL语句可以显式化 内联调用PL / SQL函数,或者可以导致PL / SQL触发器 触发预定义的数据操作语言(DML)事件。
PL / SQL存储过程(函数,过程,包和 执行DML的触发器被编译到Oracle数据库中:to 在这种程度上,他们的SQL代码可以进行语法检查。程序员 在Oracle数据库环境中工作可以构造PL / SQL块 这些功能用作程序,功能;或者他们可以 在SQL * Plus脚本中编写PL / SQL的内嵌段。
虽然程序员可以很容易地将SQL DML语句合并到 PL / SQL(例如,作为游标定义,或使用SELECT ... INTO语法),数据定义语言(DDL)语句,如CREATE TABLE / DROP INDEX等需要使用&#34; Dynamic SQL&#34;。前 Oracle的版本需要使用复杂的内置DBMS_SQL 用于动态SQL的包,系统需要显式解析 并执行SQL语句。后来的版本包含了EXECUTE IMMEDIATE语法称为&#34; Native Dynamic SQL&#34;这相当大 简化事宜。在Oracle中使用DDL将导致 隐式提交。程序员也可以使用Dynamic SQL来执行DML 他们事先并不知道陈述的确切内容。
PL / SQL为特定目的提供了几个预定义的包。这样 PL / SQL包包括:
- DBMS_OUTPUT - 用于对非数据库目标的输出操作
- DBMS_JOB - 用于在特定时间运行特定程序/功能(即调度)
- DBMS_XPLAN - 用于格式化&#34;解释计划&#34;输出
- DBMS_SESSION - 提供对SQL ALTER SESSION和SET ROLE语句以及其他会话信息的访问。
- DBMS_METADATA - 用于从数据字典中提取元数据(例如DDL语句)
- UTL_FILE - 用于在磁盘上读写文件
- UTL_HTTP - 用于从数据库向Web服务器发出请求
- UTL_SMTP - 用于从数据库发送邮件(通过SMTP服务器)
Oracle Corporation通常会添加更多软件包和/或扩展 每个后续版本的Oracle DBMS都具有包功能。
答案 1 :(得分:3)
我不知道它们有多强大,但是这个站点提供了使用SQL编写MySQL存储过程的信息;
http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx
E.g。
http://www.mysqltutorial.org/sql-cursor-in-stored-procedures.aspx
答案 2 :(得分:1)
没有。 pl / sql 是特定于 Oracle 的存储过程语言。不同的数据库对存储过程使用不同的语言有关存储过程的信息,请参阅 mySql 文档的page。
答案 3 :(得分:0)
谷歌的“Getting started with mysql stored procedures”,语法与PLSQL相距甚远。
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
答案 4 :(得分:0)
一些关系数据库供应商遵循SQL的传统定义,即将SQL定义为declarative language。这些供应商的示例包括PostgreSQL,IBM,Oracle。对于这些数据库供应商,您可以使用他们提供的自己的过程语言编写过程代码,这些语言可能会也可能不会提供SQL。
尽管有些供应商将其过程语言视为SQL的扩展。这些供应商没有任何区别。例如,在MySQL中,"Stored Program"用LANGUAGE SQL
声明,尽管它提供了不同的语言功能(like LEAVE
, REPEAT
and UNTIL
that are not provided elsewhere)。因此,您在“ SQL例程”中实际上具有与在查询表达式中不同的“ SQL语言”。其他像Microsoft这样的供应商称他们所做的一切都只有一个术语-“ T-SQL”。术语的删除使您很难在其他数据库中找到等效功能,也很难知道哪些功能可能会有所不同。
完全标准化的程序功能可能会有所不同。声明性查询语法可能很相似,因为其中有一个规范。