所以我希望它是类似的,或具有以下效果:
declare vFN varchar(20);
declare vLN varchar(20);
set vFN, vLN = (select fname, lname from sometable where id = 1);
Run Code Online (Sandbox Code Playgroud)
显然,我可以做2次选择,但这看起来非常低效.
TIA
我编写MySQL StoredProcedure来为每个表值创建并返回新的ID,但是,它在MySQL WorkBench和Java应用程序的last_insert_id()上得到了错误的值.
将从多个会话中调用此过程.
CALL `GET_NEW_ID`('test', @test);
select @test;
Run Code Online (Sandbox Code Playgroud)
它给了我"141215000000",这意味着last_insert_id()一直返回0.我看到它正确地将新数据插入到seq_data中.
CREATE PROCEDURE `GET_NEW_ID`(IN V_TABLE VARCHAR(10), OUT V_ID VARCHAR(12))
BEGIN
INSERT INTO seq_data ( id, `name`, `stat_date`)
SELECT IFNULL(MAX(id), 0)+1, V_TABLE, DATE_FORMAT(NOW(),'%Y%m%d') FROM seq_data WHERE name = V_TABLE AND stat_date = DATE_FORMAT(NOW(),'%Y%m%d');
SET V_ID = concat(DATE_FORMAT(NOW(),'%y%m%d'),LPAD(LAST_INSERT_ID(), 6, '0'));
END
Run Code Online (Sandbox Code Playgroud)
表看起来像这样.
CREATE TABLE `seq_data` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_bin NOT NULL,
`stat_date` varchar(8) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`,`name`,`stat_date`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Run Code Online (Sandbox Code Playgroud)
我的目标是...... …
我正在使用Delphi 2010.是否可以告诉Delphi不为函数生成序言?我正在写一些像这样的纯汇编函数:
procedure SomeAssembly; stdcall;
begin
asm
...
end;
end;
Run Code Online (Sandbox Code Playgroud)
我想告诉Delphi不要为这个函数生成一个序言和结语,比如C++的__declspec(naked)
特性.
所以没有人浪费他们的时间,我不需要帮助让这些功能与序幕一起工作; 我已经可以做到了.这只是一个很大的不便,将使维护成为一个巨大的麻烦.我将不得不手动检查编译器生成的序言以查看它们的长度,如果更改,我的程序将崩溃.
我也知道我可以将函数编写为字节数组中的一系列字节,但这比查找Delphi序言的长度更糟糕.
我尝试使用2种方法在Oz中打印出Fibonacci序列:使用Emac作为编辑器的函数和过程.程序在这里:
declare
fun {Fibo N}
case N of
1 then 1
[] 2 then 1
[] M then {Fibo (M-1)} + {Fibo (M-2)}
end
end
declare
proc {Loop K}
if K ==1 then {Browse K}
else
{Loop K-1}
{Browse {Fibo K}}
end
end
{Loop 10}
Run Code Online (Sandbox Code Playgroud)
和功能:
declare
fun {Fibo N}
case N of
1 then 1
[] 2 then 1
[] M then {Fibo (M-1)} + {Fibo (M-2)}
end
end
declare
fun {Loo L}
if L ==1 then {Browse L} …
Run Code Online (Sandbox Code Playgroud) Oracle SQL过程可以返回一个表吗?我目前正在使用a dbms_output
来打印出两个游标的输出,这两个游标在一个循环中,尽管如果它返回两列而看起来会更好.这可能在一个程序中吗?
我在MySQL中调用了一个过程,但它现在处于无限循环中!如何在MySQL中停止运行过程?以下是我的程序代码:
drop procedure if exists my_proc;
DELIMITER $$
CREATE PROCEDURE my_proc
()
BEGIN
DECLARE VAR INT;
SET VAR=0;
WHILE VAR<10000
DO
INSERT INTO my_table () VALUES ();
END WHILE;
END; $$
DELIMITER;
CALL my_proc();
Run Code Online (Sandbox Code Playgroud) 一周前,我在远程 MySql 数据库(Web)中创建了几个存储过程......在创建它们的会话期间,我能够编辑它们,导出它们等......
现在,一周后,我想编辑它们,我发现“例程”选项卡中这两个的“编辑”和“执行”按钮被禁用...
我的 Web 服务器正在运行 phpmyadmin 4.0.10.7
我发现,出于某种原因,在 INFORMATION_SCHEMA db 的 ROUTINES 表中,这些例程(过程)具有不同的 DEFINER(嗯,没有不同,但数据库认为它们不同)
这就是为什么我不能编辑它们......所以,最后,场景是这样的。我像往常一样登录到我的 CPanel 和 PHPMyAdmin,创建了这些程序,它们的定义器是 user@icario.servidoraweb.net(我的用户 + 域是我的托管服务提供商)......然后,当我尝试编辑它们时一周后,我登录,我发现我的用户现在(运行 SELECT CURRENT_USER();)是“user@10.0.5.47”...
我向我的托管服务提供商开了一张票,以找出为什么我现在登录到 CPanel 包含 IP 地址而不是域名,他们说他们不知道,他们没有更改任何内容。
现在,昨天我再次登录,然后我可以编辑那些程序,我检查我的用户,它再次是“user@icaro...”
今天,当我再次登录时,我又回到了“user@10.0...”
所以...我知道为什么我不能编辑那些程序...我不知道的是为什么我有时我的用户有域名,有时有 IP 地址..
对此有何想法?谢谢
目前在我的程序中,我有一个Startup表单和一个Main表单.启动表单显示一两秒钟.
现在,我在计时器中有以下代码:
frmStartup.Destroy;
frmMain := TfrmMain.Create(Self);
frmMain.Show;
Run Code Online (Sandbox Code Playgroud)
现在,我不确定这是否是正确的方法.它可行,但在调用时application.Terminate();
我收到一条访问违规消息,导致我相信我在破坏启动表单时做错了什么. .
如果有人能够显示正确的程序来做我想要的(非模态),我将不胜感激.
提前致谢,
编辑:
感谢所有反馈,我通过简单地添加代码修复了访问冲突:
Action := caFree;
Run Code Online (Sandbox Code Playgroud)
进入frmStartup.formClose方法.
我创建了一个Oracle块来检查在关联数组上使用nocopy的效果; 创建一个包含1000000个元素的数组,并将其作为参数传递给两个相同的方法,第一次作为输出参数,第二次作为输出nocopy.代码如下所示:
declare
type my_type is table of varchar2(32767) index by binary_integer;
my_array my_type;
st number;
rt number;
procedure in_out(m1 in out my_type)
is
begin
dbms_output.put_line(my_array(1));
end in_out;
procedure in_out_nocopy(m1 in out nocopy my_type)
is
begin
dbms_output.put_line(my_array(1));
end in_out_nocopy;
begin
for i in 1..999999 loop
my_array(i) := '123456789012345678901234567890123456789012345678901234567890abcd';
end loop;
st := dbms_utility.get_time;
in_out(my_array);
rt := (dbms_utility.get_time - st)/100;
dbms_output.put_line('Time needed for in out is: ' || rt || ' 100''ths of second!');
st := dbms_utility.get_time;
in_out_nocopy(my_array);
rt := (dbms_utility.get_time …
Run Code Online (Sandbox Code Playgroud)