我试图在MySQL (5.x)的WHERE语句中使用存储函数的结果,但它失败了,因为在函数中,我从表中选择值到一个整型变量中,然后返回它们/ it,如果SELECT返回超过1行,这显然不起作用。我尝试过返回表(据我所知,MySQL中的TABLE表示数组),但也不起作用。
有没有办法让我这样做:
SELECT ID FROM myTable WHERE ID IN my_function(params);
谢谢。
根据,这将在mysql.version > 5上运行。但我得到:
#1064 -您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法以使用near 'IF
代码:
IF SELECT MAX(`amount`) FROM transactions < 500
THEN
INSERT INTO transactions (amount) VALUES (500)
END IF
或
IF( (SELECT MAX(`amount`) FROM transactions < 500)
,INSERT INTO t
MySQL 5.6
CREATE PROCEDURE test()
BEGIN
DECLARE _idKeep INT;
SET _idKeep = 1;
PREPARE string FROM "UPDATE users set firstname='Joe' where id=?";
EXECUTE string USING _idKeep;
/*SELECT _idKeep;*/
END
错误信息:
您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得在“_idKeep”附近使用的正确语法;
如果我注释掉准备和执行语句,取消对S
我试图用mySQL来处理函数,我目前正在做一个检查列account_description及其值的函数,以查看描述是否已经存在。
如果它已经存在,则显示一条这样的消息。但是,如果描述不存在,则显示另一条消息,说明找不到它。
谢谢!
MySQL代码:
DROP FUNCTION IF EXISTS test_glaccounts_description
DELIMITER //
CREATE FUNCTION test_glaccounts_description
(
check_description VARCHAR(50)
)
RETURNS VARCHAR(50)
BEGIN
我正在尝试从我的数据库中的MySQL 中获取以下语句
DECLARE no_such_table CONDITION FOR SQLSTATE '42S02';
但是,我继续得到以下错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE no_such_table CONDITION FOR SQ
我想检查MySQL db是否存在,以及它是否授予用户权限。
SELECT Count(schema_name)
FROM information_schema.schemata
WHERE schema_name = 'tmx'
INTO @found ;SELECT @found; -- Verified, the result is 1IF (@FOUND == 1) THEN
GRANT
SELECT,
UPDATE
ON tmx.* TO 'my_new_user'@'%';END IF;
当我执行
我试图用phpmyadmin(v4.7.9)在MYSQL中创建一个存储过程(v5.7.21),有时会返回一个空的结果集。
CREATE DEFINER=`my_database`@`%` PROCEDURE `emptytest`(IN `_id` INT(11))
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
select * from my_table where id=_id
下一个电话是:
call emptytest(1);
当该id存在于表中时,此方法工作得很好:
id name
--------
1 bob
但在没有行可
在遵循MySQL的IF语法指南时,我得到了一个语法错误。
我的问题是:
if 0=0 then select 'hello world'; end if;
从逻辑上讲,这应该选择'hello world',但是我得到了
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if (0=0) then s
我做了一个带有in和out参数的过程:
delimiter //
DROP PROCEDURE IF EXISTS empInfo ;
CREATE PROCEDURE empInfo (tblname VARCHAR(50),
clName VARCHAR(50),
out total INT)
BEGIN
SET @s = CONCAT("SELECT count(", clName ,") into total FROM ", tblname );
我有两个基表"tutorials_tb2","tutorials_tbl",我正在尝试以"tutorials_tb2_new","tutorials_tbl_new"的身份从这些表中创建两个新表,这样tutorials_tb2将成为tutorials_tb2_new的源,类似地,tutorials_tbl将成为tutorials_tbl_new的源
我正在尝试使用JSON_*方法创建一个MySQL函数,将新的和原来的表作为数组
DELIMITER //
CREATE FUNCTION example()
BEGIN
DECL
我想使用存储过程来定义select语句的IN子句。
这是我正在尝试做的事情(的简化版本):
SELECT *
FROM myTable
WHERE columnName IN (CALL myStoredProc)
myStoredProc在数据库中执行一些复杂的逻辑,并返回columnName的可能匹配值的列表。上面的陈述显然不起作用。select语句可以在另一个存储过程中执行,如果这样做会有所不同的话。
这在mySQL中是可能的吗?
我正在编写我的第一个sql触发器query.So,我试图理解触发器statement.My计划的思想是--
1.将数据插入到一个称为“触发器_表”的表中;
2.插入后,从完全相同的表中获取数据,并使用PDO将其存储到php变量中;
因此,我编写了下面的触发器statement.And,在mysql工作台中执行sql时得到了此错误。
错误1415:不允许从触发器返回结果集
SQL Statement:
CREATE TRIGGER `trigger_table_AINS` AFTER INSERT ON trigger_table FOR EACH ROW
-- Edit t
如何执行以下操作:(我使用的是mysql - phpmyadmin )
此查询返回一个表名:
Select table_name from Table1 where id = 1
我想在另一个查询中使用它,比如:
select val from (Select table_name from Table1 where id = 1)
但这肯定不起作用,而且由于phpmyadmin不支持调用存储过程,有可能有任何可能的解决方案吗?
我在mysql中注意到,为什么准备一个动态查询需要一个我认为是全局变量的变量。有没有办法将变量的作用域限制在begin和end语句之间?下面是我的测试脚本,当为limitCnt变量返回值10时。
delimiter //
drop procedure if exists testProc//
create procedure testProc ()
begin
-- DECLARE limitCnt INT default 10;
SET @limitCnt = 10;
PREPARE stmt FROM 'SELECT * FROM `participants` LIMI
我在db更新脚本中有以下代码:
set @index1 = ifnull((select count(1) from information_schema.statistics
where table_name = 'Entries' and index_name = 'IX_Entries_EmailAddress'),0);
set @index2 = ifnull((select count(1) from information_schema.statistics
where table_name = 'Entries'
在MySQL中,有没有办法从另一个存储过程中创建一个存储过程?
我们通过使用临时存储过程来处理数据库更新,该过程检查表中的数据库版本:
DELIMITER #
DROP PROCEDURE IF EXISTS sp_temp_update_table#
CREATE PROCEDURE sp_temp_update_table()
BEGIN
DECLARE v_db_version DECIMAL(10,6);
SELECT CAST(`value` AS DECIMAL(10,6)) INTO v_db_version
FROM `db_metadata` met
我有一个MySQL脚本,只有当数据库不存在时才使用它来为开发注入一些初始的演示数据。如果它确实存在的话,我只想打破这个脚本。脚本的开头如下
CREATE DATABASE IF NOT EXISTS `demo-database`;
USE `demo-database`;
如果数据库存在,那么是否有一种方法可以在或上面退出,这样它就不会运行在所有的表设置和插入中?
今天,在SQL Server 2014中创建存储过程时,我注意到了一种奇怪的行为。下面是我的测试程序。请解释为什么Server不允许使用第一个SELECT进行编译,而允许使用第二个进行编译。
CREATE PROCEDURE [dbo].[test]
AS
BEGIN
SET NOCOUNT ON;
IF 1=0 -- this will never occur
BEGIN
select x from Table -- TABLE EXIST BUT COLUMN NOT - STORED PROCEDURE IS NOT CREATED