我对于为mySQL数据库写存储函数的主题很新,因此我不确定我在这里尝试做什么是可能的.
我需要一个函数,它将从表中的随机行返回一列.我不想使用ORDER BY RAND()方法来做到这一点,而是我会这样做:
DECLARE MAX_COUNT INT DEFAULT 120000;
DECLARE rand_offset INT;
DECLARE str_rnd_word VARCHAR(255);
SET rand_offset = FLOOR((RAND() * MAX_COUNT));
SELECT word INTO str_rnd_word FROM all_words LIMIT 1 OFFSET rand_offset ;
RETURN str_rnd_word;
Run Code Online (Sandbox Code Playgroud)
MySQL在创建类似于body的函数时抛出错误.但是,当我使用硬编码的数字作为OFFSET时,它工作得很好.
有人可以就这个话题说清楚.
我在Windows机器上运行MySQL 5.0.45.
谢谢
我是PostgreSQL的新手,想要使用存储函数创建数据库.
例如:
CREATE OR REPLACE FUNCTION mt_test(dbname character varying)
RETURNS integer AS
$BODY$
Create Database $1;
Select 1;
$BODY$
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此函数时,我收到语法错误.
Postgres是否支持CREATE DATABASE存储函数中的语句?
所以这就是我想要做的.
第一个选项是将每个函数写入不同的php文件中,然后将它们全部包含在一个名为includes functions.php的php文件中,每当我创建一个新页面时,让我们说index.php我只包含"函数. PHP的";
为什么我需要这样做?因为我只需要包含一个文件,所有功能都将包含在内.现在问题可能是服务器负载.我不确定有多少未调用的函数会影响性能.
第二个选项是再次创建我需要的文件,组合它们,然后每当我需要一个函数时调用它.这样做的缺点是我要做更多工作才能进行分类,我将不得不包含大量文件
所以我想问一下,第一个选项是否增加了cpu和内存负载,我必须去第二个?第一种方式是否有任何性能问题,或者php没有解析未使用的功能?
当我运行下面存储的JavaScript函数时,我得到错误:
> db.system.js.save({_id:"last_n_users", value: function(n){return db.users.find().sort({created_at:-1}).limit(n)}})
> db.eval("last_n_users(10)")
Run Code Online (Sandbox Code Playgroud)
这是错误:
{ "value" : "DBQuery: store.users -> undefined" }
Run Code Online (Sandbox Code Playgroud)
为什么?请帮我?
问题在视图执行时间和表执行时间之间是不同的。
为什么两个查询之间有这么多差异?
使用“ LIMIT”子句的查询2查询的速度越来越快,但现在却非常慢。(例如Select * From ... limit 1000)
注意:我在VIEW中使用的功能不会做任何艰苦的工作。语言plpgsql。
查询1:执行时间= 106.726 ms;
EXPLAIN ANALYZE SELECT * FROM dbo.ST_Foto where StationId='Sample Guid'
and Tarih <='2018-09-12' -- Table
Run Code Online (Sandbox Code Playgroud)
查询1解释分析;
"Seq Scan on st_foto (cost=0.00..4559.68 rows=103878 width=215) (actual time=0.036..81.046 rows=103938 loops=1)"
" Filter: ((tarih <= '2018-09-12 00:00:00'::timestamp without time zone) AND (stationid = 'ac5a2189-f931-47c0-9845-d0ff8eac7cb7'::uuid))"
" Rows Removed by Filter: 20174"
"Planning time: 0.359 ms"
"Execution time: 106.726 ms"
Run Code Online (Sandbox Code Playgroud)
查询2执行时间= 30562.223 ms;
EXPLAIN ANALYZE SELECT * FROM dbo.VWST_Foto where StationId='Sample Guid'
and Tarih …Run Code Online (Sandbox Code Playgroud) 每当我通过Web API访问具有内存表的存储过程TransactionScope时,都会出现此错误:
当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。在批处理结束时检测到不可提交的事务。交易回滚
我试图直接在SQL Server Management Studio中执行相同的存储过程,并且工作正常。
另外,当我TransactionScope从Web API中删除时,它也可以正常工作。但是我想TransactionScope在Web API内使用
在存储过程中,我有以下内容:
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
BEGIN TRY
SELECT ITEMID FROM SAMPLE_IN_MEMORY_TABLE
----
END TRY
BEGIN CATCH
--
END CATCH
Run Code Online (Sandbox Code Playgroud)
在Web API内部,按照以下方式使用存储过程
QueriesTableAdapter qa = new QueriesTableAdapter();
using (TransactionScope scope = new TransactionScope())
{
qa.SpSampleInMemoeryAccess(g_OutParameter64);
if (g_OutParameter64 > 0)
{
scope.Complete();
Status = true;
}
else
{
Status = false;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用ado连接到Oracle数据库的vb.net代码库.我们有很多存储过程可以调用,有些存在多个out参数.但是,我现在需要调用一个存储函数,我不清楚如何将函数的结果返回到我的VB代码中.
编辑:我正在返回一个整数.
如何从ado.net正确调用oracle存储函数?
我正在编写一个函数,我需要使用一个TABLE变量(我听说它们在MySQL中不存在)或临时表.
但是,似乎临时表似乎只在存储过程中工作,而不是函数.我一直收到这个错误:
存储函数或触发器中不允许显式或隐式提交.
我正在努力建立的是我早期问题的解决方案.它是一个接收开始日期,结束日期和逗号分隔字符串的函数.它首先查找开始日期和结束日期之间的所有月份,并将它们作为单个记录保存在第一个临时表中.然后它解析出逗号分隔的字符串并将它们保存到第二个临时表中.然后它对两者进行选择连接,如果存在记录,则返回true,否则返回false.
我的目的是将其用作另一个查询WHERE子句的一部分,因此它需要是一个函数而不是存储过程.
如何在存储函数中使用临时表?如果我不能,我该怎么办呢?
这是我的(目前已损坏)功能(或作为要点):
-- need to parse out a string like '4,2,1' and insert values into temporary table
-- MySQL doesn't have a native string split function, so we make our own
-- taken from: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/
DROP FUNCTION IF EXISTS SPLIT_STR;
CREATE FUNCTION SPLIT_STR(x VARCHAR(255), delim VARCHAR(12), pos INT) RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');
-- need to …Run Code Online (Sandbox Code Playgroud) 我在第12行收到错误(在endif语句中).我相信我在IF或ELSE中做错了什么,任何人都可以帮助我吗?
DELIMITER $$
CREATE FUNCTION TEST (`param` INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE `var` INT;
SET `var` = 1;
IF `param` > 0 THEN
SET `var` = `var` + `param`;
END IF;
RETURN `var`;
END$$
Run Code Online (Sandbox Code Playgroud)
编辑:(与案件相同的功能,而不是如果,相同的问题)
DELIMITER $$
CREATE FUNCTION TEST (`param` INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE `var` INT;
SET `var` = 1;
SET `var` =
CASE
WHEN `param` > 0 THEN `var` + `param` ELSE `var`
END ;
RETURN `var`;
END$$
Run Code Online (Sandbox Code Playgroud) 我正在尝试在PostgreSQL中创建一个存储过程。当我使用时float,该函数有效,但是当我尝试将floats 更改numeric为时出现错误:
ERROR: cannot change return type of existing function
SQL state: 42P13
Detail: Row type defined by OUT parameters is different.
Hint: Use DROP FUNCTION percent_grades(text) first.
Run Code Online (Sandbox Code Playgroud)
我真的不知道这是什么意思,但是除了CAST更改,我不需要执行任何其他操作type。
我的职能是:
CREATE OR REPLACE FUNCTION percent_grades(text)
RETURNS TABLE(grade text, percent float)
AS
$$
DECLARE percent_total float;
BEGIN
RETURN QUERY
SELECT psa_grade_name,
SUM(psa_amount) / CAST(total_cards($1) AS float) AS percent_total
FROM psa_pop_view
WHERE psa_card = $1
GROUP BY psa_grade_name
ORDER BY psa_grade_name;
END; …Run Code Online (Sandbox Code Playgroud) stored-functions ×10
mysql ×3
postgresql ×3
sql ×2
ado.net ×1
database ×1
ddl ×1
function ×1
mongodb ×1
oracle ×1
performance ×1
php ×1
querying ×1
transactions ×1
view ×1