标签: procedure

奇怪的TCL怪癖

因此,我对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行为.也许在您的回复中,您可以指出这是否也是其他口译员的标准?

interpreter procedure tcl externals

1
推荐指数
1
解决办法
213
查看次数

为什么在执行我的应用程序的第一行代码之前调用TObject.Free?

我们试图弄清楚我们的软件是否存在内存泄漏.所以,我一直在使用各种工具和程序来帮助我找到可能的内存泄漏.我使用的软件之一是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显示在屏幕上时,不断调用过程?

提前致谢.

memory delphi procedure

1
推荐指数
1
解决办法
523
查看次数

Ada受保护的类型

我在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)

我该怎么办呢?

procedure function ada

1
推荐指数
1
解决办法
2303
查看次数

Oracle存储过程"遇到符号..."错误

在进行了一项研究后,我决定不知道是什么导致了以下问题!我想创建一个存储过程,如果满足一个语句,将增加列的值.我可以作为匿名块运行该过程,但我不能将其作为存储过程运行!

这是存储过程代码:

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)

database oracle symbols procedure

1
推荐指数
1
解决办法
860
查看次数

传递一个tmemorystream作为var

当我尝试将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)

delphi pointers var procedure

1
推荐指数
1
解决办法
864
查看次数

我尝试调用程序时为什么会出错?

我创建了一个名为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服务器的当前用户的名称

oracle plsql procedure oracle11g

1
推荐指数
1
解决办法
1万
查看次数

在声明PL/SQL过程/函数时,"IN"和"OUT"关键字是强制性的吗?

我现在正在学习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'也有什么区别吗?

oracle plsql procedure

1
推荐指数
1
解决办法
121
查看次数

在NUM子列的IN子句中使用逗号分隔值

我在包中有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错误.

有人可以在这帮忙.

sql oracle plsql procedure

1
推荐指数
1
解决办法
2969
查看次数

我的语法在这里是否正确?C++

所以我基本上整天都在编写这个程序,经历了许多迭代和问题,最后在完成之后我回去运行它,发现我开始工作的最简单的部分现在不再起作用了.

#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)

c++ syntax procedure vector call

1
推荐指数
1
解决办法
75
查看次数

日期格式图片在转换整个输入字符串错误之前结束

我有这个程序:

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-“日期格式图片在转换整个输入字符串之前结束”

sql oracle timestamp date procedure

1
推荐指数
1
解决办法
2万
查看次数