create or replace package body gzga_common_pg is  PROCEDURE gzga_list_calculate_sp(p_total_records IN NUMBER,
       p_total_pages OUT NUMBER,
       p_start_record OUT NUMBER,
       p_end_record OUT NUMBER,
       p_error_code OUT VARCHAR2,
                                  p_page_number IN OUT NUMBER)
IS
-- The number of records per page
n_record_per_page NUMBER;

-- The maximum records for displaying
n_max_record_display NUMBER;

BEGIN
-- error code initialization
p_error_code := 'SUCCESS';

-- parameters initialization
SELECT TO_NUMBER(parametervalue) into n_record_per_page
FROM parameter
WHERE parameterid = 'REC_PER_PAGE'; SELECT TO_NUMBER(parametervalue) into n_max_record_display
FROM parameter
WHERE parameterid = 'MAX_REC_DISPLAY';

IF(p_total_records = 0) THEN
  p_start_record := 0;
  p_end_record := 0;
  p_total_pages := 1;
  p_page_number := 1;

ELSIF (p_total_records > n_max_record_display) THEN
  p_start_record := 0;
  p_end_record := 0;
  p_total_pages := 1;
  p_page_number := 1;
  p_error_code := 'EXCEED';

ELSE
           -- Calcalate the number of pages for displaying all records
           p_total_pages := p_total_records / n_record_per_page;
           IF (ROUND(p_total_pages) > p_total_pages OR
               ROUND(p_total_pages) = p_total_pages) THEN
             p_total_pages := ROUND(p_total_pages);
           ELSE
             p_total_pages := ROUND(p_total_pages) + 1;
           END IF;

p_start_record := p_page_number * n_record_per_page - n_record_per_page+1;
p_end_record := p_page_number * n_record_per_page;

IF(p_end_record > p_total_records) THEN
  p_end_record := p_total_records;
  p_start_record := p_total_pages * n_record_per_page - n_record_per_page + 1;
  p_page_number := p_total_pages;
END IF;

IF(p_start_record < 1) THEN
  p_start_record := 1;
  p_page_number := 1;
  IF(p_total_records >= n_record_per_page) THEN
    p_end_record := p_start_record + n_record_per_page - 1;
  ELSE
    p_end_record := p_total_records;
  END IF;
END IF;
       END IF;

 END gzga_list_calculate_sp; 
end gzga_common_pg;
现在我想把它移植到sqlserver2000(个人版)上来使用,但是在查询分析器里面没有运行成功,请大家帮忙啦,将其改成sqlserver2000下的存储过程,向你们学习.....谢谢啦!!

解决方案 »

  1.   

    Oracle使用的是PL/SQL,而SQL Server使用的是T-SQL,两者用法相差很大。需要手工逐条SQL转换。
      

  2.   

    只写过ORACLE的存储过程,没写过SQLSERVER2000的
      

  3.   

    希望高手帮忙把这个一ORACLE的存储过程完整地翻译转换为sqlserver2000存储过程,我好参照着改啊!
      

  4.   

    wangtiecheng(不知不为过,不学就是错!) :帮帮忙吧,非常感谢!
      

  5.   

    wangtiecheng(不知不为过,不学就是错!) :现装一个嘛,很快的.........
      

  6.   

    搞错,有oracle不用,来用sql server
      

  7.   

    看他的输入输出内容,根据这些自己写个sql过程……
      

  8.   

    试试create  PROCEDURE gzga_list_calculate_sp(@p_total_records  INT,
           @p_total_pages  numeric(12,2) output,
           @p_start_record INT output,
           @p_end_record INT output,
           @p_error_code  VARCHAR(100) output,
           @p_page_number  INT output)
    as begin
    -- The number of records per page
    declare @n_record_per_page INT-- The maximum records for displaying
    declare @n_max_record_display INT-- error code initialization
    SET @p_error_code = 'SUCCESS'-- parameters initialization
    SELECT @n_record_per_page=convert(int,parametervalue)
    FROM parameter
    WHERE parameterid = 'REC_PER_PAGE'SELECT @n_max_record_display=convert(int,parametervalue) 
    FROM parameter
    WHERE parameterid = 'MAX_REC_DISPLAY'IF(@p_total_records = 0) begin
      SET @p_start_record = 0
      SET @p_end_record = 0
      SET @p_total_pages = 1
      SET @p_page_number = 1
    END
    else if (@p_total_records > @n_max_record_display) BEGIN
      SET @p_start_record = 0
      SET @p_end_record = 0
      SET @p_total_pages = 1
      SET @p_page_number = 1
      SET @p_error_code = 'EXCEED'
    END
    ELSE begin
               -- Calcalate the number of pages for displaying all records
               set @p_total_pages = @p_total_records / @n_record_per_page
               IF (ROUND(@p_total_pages,0) > @p_total_pages OR
                   ROUND(@p_total_pages,0) = @p_total_pages) begin
                 SET @p_total_pages = ROUND(@p_total_pages,0)
               end
               ELSE begin
                 SET @p_total_pages = ROUND(@p_total_pages,0) + 1
               end
    set @p_start_record = @p_page_number * @n_record_per_page - @n_record_per_page+1
    set @p_end_record = @p_page_number * @n_record_per_pageIF(@p_end_record > @p_total_records) BEGIN
      set @p_end_record = @p_total_records
      set @p_start_record = @p_total_pages * @n_record_per_page - @n_record_per_page + 1
      set @p_page_number = @p_total_pages
    ENDIF(@p_start_record < 1) BEGIN
      SET @p_start_record = 1
      SET @p_page_number = 1
      IF(@p_total_records >= @n_record_per_page) 
       SET  @p_end_record = @p_start_record + @n_record_per_page - 1
      ELSE
       SET @p_end_record = @p_total_records
    END 
    END 
    END 
      

  9.   

    ORACLE9.2自己有什么工具可以把存储过程转换为sqlserver2000存储过程吗?请指教!
      

  10.   

    ORACLE9I自带有什么工具可以把存储过程转换为sqlserver2000存储过程吗?请指教!
      

  11.   

    ORACLE9I自带有什么工具可以把存储过程转换为sqlserver2000存储过程吗?给个思路也行阿!请指教!
      

  12.   

    ORACLE 9I自带有什么工具可以把存储过程转换为sqlserver2000存储过程吗?给个思路也行阿!请指教!想用TOAD