因此,我对TCL编程的方式非常新,缺乏经验.我写了一个脚本,调用别人写的proc,首先删除输出文件.然后我做了一些我写的额外逻辑.
我将逻辑移动到第二个过程中,并立即将其中的一堆(即rm命令)打破.
据我所知,中央执行中的第一个程序(proc定义后面的文本)在没有"exec"命令的情况下正常执行.但是,如果你在proc中移动它,它现在需要一个"exec"命令.
任何人都可以向我解释为什么TCL这样做?
例如
proc helloworld {} {
puts "hi"
}
#works
rm my_file
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#doesn't work
rm my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#works
eval rm my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
..
proc helloworld {} {
#works
file delete my_file
puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)
*请注意,这种奇怪的行为可能是特定于我将脚本提供给vmd的程序,后者具有自己内置的TCL行为.也许在您的回复中,您可以指出这是否也是其他口译员的标准?
我们试图弄清楚我们的软件是否存在内存泄漏.所以,我一直在使用各种工具和程序来帮助我找到可能的内存泄漏.我使用的软件之一是AQTime.随着Delphi XE的推出,它只是一个演示.所以,我真的无法从中获得任何有用的信息.然后,我决定使用自由软件MemProof.到目前为止,它向我展示了我们的软件需要注意的许多问题.其中一个是错误.
一旦我通过MemProof启动我的程序,它就会列出2个错误,它们试图从单元文件system.pas中销毁不存在的对象.因此,当我在TObject.Free过程中实际设置断点时,它甚至在我的程序一直启动之前就会中断.在system.pas中逐步执行免费程序,我发现TIconimage试图破坏或释放自己.换句话说,在实际启动之前,我的程序中不会调用自由过程.
这是实际的免费程序:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
Run Code Online (Sandbox Code Playgroud)
在观察之后,我删除了断点并让程序一直运行.我的程序主窗口弹出,准备好用户输入.但是,我还发现如果我的程序的WINDOW的任何部分显示在屏幕上,则会不停地调用TObject.Free过程.我根本不明白.这是为什么?谁能解释一下?TForm如何与任何形状或形式的TObject.Free相关,因为当TForm显示在屏幕上时,不断调用过程?
提前致谢.
我在Ada中有一个包含程序和功能的简单包.我想把所有的功能和程序都放在受保护的类型中.
例如,对于一个简单的.adb文件
package body Pack is
procedure procedure1 (B : in out Integer) is
begin
B := new Integer;
end procedure1;
procedure procedure2 (B: in out Integer) is
begin
B.Cont(B.First-1) := 1;
end procedure2;
function procedure3 (B : Integer) return Boolean is
begin
return B.First = B.Last;
end procedure3;
end pack;
Run Code Online (Sandbox Code Playgroud)
或者简单的.ads
package body Pack is
procedure procedure1 (B : in out Integer);
procedure procedure2 (B: in out Integer);
function procedure3 (B : Integer) return Boolean;
end pack;
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
在进行了一项研究后,我决定不知道是什么导致了以下问题!我想创建一个存储过程,如果满足一个语句,将增加列的值.我可以作为匿名块运行该过程,但我不能将其作为存储过程运行!
这是存储过程代码:
1 create or replace
2 Procedure RaiseSalary
3 Is
4 Salary number;
5 Cursor RaiseCursor
6 Is
7 Select Salary_A From Person Where Salary_A<400 for update of Salary_A;
8 Begin
9 Open RaiseCursor;
10 Loop
11 Fetch RaiseCursor Into Salary;
12 Exit When RaiseCursor%Notfound;
13 Update Person Set Salary_A=(Salary + 200) Where Current Of RaiseCursor;
14 End Loop;
15 Close RaiseCursor;
16 Commit;
17 End;
Run Code Online (Sandbox Code Playgroud)
我在第3行收到一个错误,说"遇到符号"SALARY"当期待下列之一时:......"我在第5行得到了相同的错误,在字母Cursor的"s"字母,但此时它说";" 而不是"薪水".编译器日志显示"权限不足",但我找不到合理的解释.我试图将代码作为匿名块运行,如下所示:
Declare
Salary number;
Cursor RaiseCursor
Is
Select Salary_A From Person Where …Run Code Online (Sandbox Code Playgroud) 当我尝试将tmemorystream作为var或指向程序的指针传递时,它会被损坏.这样做的正确方法是什么?
例如:
function tform1.downloadmemupdate(url, desc: string; var data: tmemorystream; var msg: string): boolean;
begin
filelabel.Caption:=desc;
downloadmemthread:=tdownloadmemthread.create(url);
dlcancelbtn.Enabled:=true;
downloadmemthread.dlstart;
waitforsingleobject(downloadmemthread.Handle, INFINITE);
downloadmemthread.data.SaveToStream(data); //corrupted
downloadmemthread.data.SaveToFile('data.zip'); //works
dlcancelbtn.Enabled:=false;
result:=not (downloadmemthread.canceled and downloadmemthread.success);
dlcanceled:=downloadmemthread.canceled;
msg:=downloadmemthread.msg;
downloadthread.Free;
end;
Run Code Online (Sandbox Code Playgroud) 我创建了一个名为greet的过程:
create procedure greet(message in char(50))
as
begin
dbms_output.put_line('Greet Message : ' || message);
end;
Run Code Online (Sandbox Code Playgroud)
程序编译成功,但当我尝试将其称为:
execute greet('Hey ! This is a self created procedure :)');
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
execute greet('Hey ! This is a self created procedure :)')
Error report:
ORA-06550: line 1, column 7:
PLS-00905: object SUHAIL.GREET is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)
它有什么错误?我为什么要这个?
注意:'suhail'是连接到oracle服务器的当前用户的名称
我现在正在学习PL/SQL并遇到一些误解,就像你声明一个程序一样,当你指出参数的类型时,你是否必须写关键词'IN'和'OUT'?因为我在Oracle文档网站上看到了一些程序声明.在一种情况下,IN出现在参数列表中
PROCEDURE double (
original IN VARCHAR2,
new_string OUT VARCHAR2
) AS
BEGIN
new_string := original || original;
END;
BEGIN
DBMS_OUTPUT.PUT_LINE ....
Run Code Online (Sandbox Code Playgroud)
在另一种情况下,没有IN:
CREATE OR REPLACE PROCEDURE award_bonus (
emp_id NUMBER, bonus NUMBER) AS
commission REAL;
comm_missing EXCEPTION;
BEGIN
SELECT ....
Run Code Online (Sandbox Code Playgroud)
关键词'IS'和'AS'也有什么区别吗?
我在包中有2个程序.我正在调用一个过程来获取逗号分隔的用户ID列表.
我将结果存储在VARCHAR变量中.现在当我使用这个以逗号分隔的列表放入其中的一个IN子句时抛出" ORA-01722:INVALID NUMBER"异常.
这就是我的变量的样子
l_userIds VARCHAR2(4000) := null;
Run Code Online (Sandbox Code Playgroud)
这是我分配值的地方
l_userIds := getUserIds(deptId); -- this returns a comma separated list
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是 -
select * from users_Table where user_id in (l_userIds);
Run Code Online (Sandbox Code Playgroud)
如果我运行此查询,我会收到INVALID NUMBER错误.
有人可以在这帮忙.
所以我基本上整天都在编写这个程序,经历了许多迭代和问题,最后在完成之后我回去运行它,发现我开始工作的最简单的部分现在不再起作用了.
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void Determine_Output (double);
int main()
{
vector<double> thisVector(10);
double input=-2;
int i=1;
double average = 0.00;
double highest;
double lowest;
cout<<setprecision(3);
for (unsigned z=0; z<10; z++)
{
cout<<"Please enter result \"" <<i<< "\": ";
cin>> input;
if ((input <= 100)&&(input >= 0))
{
thisVector.push_back(input);
Determine_Output(thisVector[i]); //Offending procedure call
i++;
}
else if (input == -1)
break;
else
{
cout<<"Invalid input, must be between 0 and 100\n";
z--;
}
}
void …Run Code Online (Sandbox Code Playgroud) 我有这个程序:
create or replace Procedure return_rows_LECTURE_BY_DATE (in_date in date, out_cursor OUT SYS_REFCURSOR) As
Begin
OPEN out_cursor for
select *
FROM COURSE_LECTURE
WHERE LECT_DATE_TIME_START >= to_timestamp(in_date, 'dd-mm-yyyy')
and LECT_DATE_TIME_START < to_timestamp(in_date+1, 'dd-mm-yyyy')
ORDER BY LECT_DATE_TIME_START;
End;
Run Code Online (Sandbox Code Playgroud)
输入:日期,输出:该日期的讲座。表(视图)中的日期为TIMESTAMP。
我要运行此过程。我尝试了这个:
declare
k SYS_REFCURSOR;
--t DATE:= to_date('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS') ;
res COURSE_LECTURE%rowtype;
begin
return_rows_LECTURE_BY_DATE(to_date('2010-12-14', 'YYYY-MM-DD'),k);
loop
FETCH k into res;
Exit when k%notFound;
DBMS_OUTPUT.PUT_LINE(res.COURSE_NAME );
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:
错误报告-ORA-01830:日期格式图片在转换整个输入字符串之前结束ORA-06512:在“ HR.RETURN_ROWS_LECTURE_BY_DATE”,第4行ORA-06512:行6在01830。00000-“日期格式图片在转换整个输入字符串之前结束”