Comment convertir MS SQL Stored Procedure en Oracle

Je suis coincé avec cette requête. J'essaie de convertir mais, je suis nouveau chez Oracle 11 g.

C'est la procédure MS SQL stockée pour convertir avec Oracle 11 g.

CREATE PROCEDURE [dbo].[GetCustomers_Pager] @SearchTerm VARCHAR(100) = '' ,@PageIndex INT = 1 ,@PageSize INT = 10 ,@RecordCount INT OUTPUT AS BEGIN SET NOCOUNT ON; SELECT ROW_NUMBER() OVER ( ORDER BY [CustomerID] ASC )AS RowNumber ,[CustomerID] ,[CompanyName] ,[ContactName] ,[City] INTO #Results FROM [Customers] WHERE [ContactName] LIKE @SearchTerm + '%' OR @SearchTerm = '' SELECT @RecordCount = COUNT(*) FROM #Results SELECT * FROM #Results WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 DROP TABLE #Results END 

Je trouve cette procédure MS SQL stockée à ce lien

Ceci est ma procédure stockée Oracle échec. Je suis coincé avec la syntaxe INTO.

 CREATE OR REPLACE PROCEDURE GetCustomers_Pager ( SearchTerm IN VARCHAR2 , PageIndex IN NUMBER DEFAULT 1 , PageSize IN NUMBER DEFAULT 10 , RecordCount OUT NUMBER ) AS BEGIN SELECT ROW_NUMBER() OVER( ORDER BY CustomerID ASC )AS RowNumber, ,CustomerID ,CompanyName ,ContactName ,City INTO Results FROM Customers WHERE ( Customers LIKE SearchTerm + '%' OR ContactName LIKE SearchTerm + '%') OR SearchTerm = ''; SELECT RecordCount = COUNT(*) FROM Results; SELECT * FROM Results WHERE RowNumber BETWEEN(PageIndex -1) * PageSize + 1 AND(((PageIndex -1) * PageSize + 1) + PageSize) - 1; DROP TABLE Results; END GetCustomers_Pager; 

Est-ce que quelqu'un peut m'aider s'il vous plait?

Vous pouvez utiliser uniquement une variable de type simple dans la clause SELECT INTO , pour la sélection dans le tableau, utilisez SELECT BULK COLLECT INTO . Cependant, vous devez déclarer la variable que vous select et son type doit correspondre.

Si vous voulez sélectionner uniquement le nombre, utilisez ceci:

 SELECT COUNT(*) INTO RecordCount FROM (SELECT ROW_NUMBER() OVER( ORDER BY CustomerID ASC )AS RowNumber, CustomerID, CompanyName, ContactName, City FROM Customers WHERE ( Customers LIKE SearchTerm + '%' OR ContactName LIKE SearchTerm + '%') OR SearchTerm = '') s WHERE RowNumber BETWEEN (PageIndex-1)*PageSize + 1 AND PageIndex*PageSize; 

Si vous voulez returnner les loggings, vous devez définir le type de tableau, append le paramètre de sortie Records et utiliser SELECT * BULK COLLECT INTO Records , puis RecordCount := Records.COUNT; .

Mais le meilleur moyen de renvoyer des données est un paramètre de sortie REF CURSOR , voir http://oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php .

Code de procédure Oracle avec slider en tant que paramètre de sortie:

 CREATE OR REPLACE PROCEDURE GetCustomers_Pager ( SearchTerm IN VARCHAR2, PageIndex IN NUMBER DEFAULT 1, PageSize IN NUMBER DEFAULT 10, RecordCount OUT NUMBER, Records out sys_refcursor ) AS begin -- count all matching rows select count(1) into RecordCount from Customers where ContactName like SearchTerm||'%'; -- get all matching rows into cursor "Records" -- and filter them including PageIndex and PageSize parameters open Records for select rn, customerid, companyName, contactName, City from ( select row_number() over (order by customerID) rn, customerid, companyName, contactName, City from customers where ContactName like SearchTerm||'%' ) where rn between (PageIndex-1) * PageSize and (((PageIndex-1) * PageSize + 1) + PageSize) - 1; end GetCustomers_Pager; 

Exemple de code C # appelant cette procédure et remplissant DataGridView:

 OracleCommand cmd = new OracleCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "getcustomers_pager"; cmd.Connection = CONNECTION.oconn; cmd.Parameters.Add(new OracleParameter("SearchTerm", OracleType.VarChar, 3)).Value = "Mar"; cmd.Parameters.Add(new OracleParameter("PageIndex", OracleType.Number)).Value = 1; cmd.Parameters.Add(new OracleParameter("PageSize", OracleType.Number)).Value = 5; OracleParameter p = new OracleParameter("RecordCount", OracleType.Number); p.Direction = ParameterDirection.Output; cmd.Parameters.Add(p); p = new OracleParameter("Records", OracleType.Cursor); p.Direction = ParameterDirection.Output; cmd.Parameters.Add(p); OracleDataAdapter da = new OracleDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); dgv.DataSource = ds.Tables[0];