TUCSON, Ariz. -- Add Ryan Katz to the list of impressive Pac-10 quarterbacks.
The sophomore from Santa Monica, Calif., threw for 393 yards and two touchdowns, sneaked across for another score and the Beavers held on for a 29-27 upset.
"We knew what we had to do coming into the game and we went out there and did it," Katz said. "I felt a lot of confidence out there and we got the job done."
Katz completed 30 of 42 against an Arizona defense that had been ranked No. 2 nationally, giving up 230.8 yards per game.
"I just see a lot more confidence in him," Oregon State's Joe Halahuni said. "He's more of a leader off the field and in the huddle. He"s doing great running the ball, throwing it and making good decisions."
Three times Katz eluded the pass rush and scrambled for a first down on third-down situations.
"You can't tell a guy to scramble or not scramble, that's all the quarterback," Oregon State coach Mike Riley said. "He has to be comfortable and make the right decision. We really haven't had a quarterback here who can run for a first down."
The Wildcats (4-1, 1-1 Pac-10), in the top 10 for the first time since the 1999 preseason rankings and coming off a bye week, never led. The loss dampened their hopes for the school's first trip to the Rose Bowl.
The Wildcats' Nick Foles completed 35 of 46 for 440 yards and three touchdowns.
"When you look at the entire game, we just weren't all there," Arizona coach Mike Stoops said. "I think we did compete well in the secondary but this was the most yards we've given up in a long time. Oregon State really beat us in a lot of ways. They wanted to throw the ball and they threw it at will, which is very hard to come back from."
Oregon State (3-2, 2-0) lost standout receiver James Rodgers to what could be a season-ending knee injury in the second quarter. He was in street clothes on crutches in the second half after seven catches for 102 yards, including a 33-yarder for the Beavers' first score. Riley said the injury was "not good" and he would know more on Sunday.
Rodgers could get a medical redshirt because he didn't play in the previous game because of a concussion.
It was Oregon State's third road game against a top 10 team this season. The Beavers lost at TCU and Boise State, but they have started slow, then come on strong before.
Riley called the victory "a huge win for our program."
Foles' 12-yard touchdown pass to Keola Antolin cut the lead to 29-27 with 1:52 to play but Oregon State recovered the subsequent onside kick attempt. Arizona got the ball on its own 20 with two seconds left and tried to use a short pass and a series of laterals to score. But Antolin was stopped at midfield to finish Oregon State's fifth consecutive victory in Tucson.
"We should have been better prepared," Arizona defensive end Ricky Elmore said. "Those big plays they hit, we worked on them so many times. I don't know what happened."
The teams combined for 1,027 yards in a game that featured five touchdown plays of 33 yards or longer.
Rodgers' younger brother, Jacquizz, rushed for 92 yards in 25 carries and caught three passes for 41 yards. His 1-yard touchdown run with 5:46 to play put the Beavers up 29-20.
James Rodgers made a fingertip catch of Katz's deep pass for what would have been a 56-yard touchdown with 5:07 left in the half. But he was hit by Arizona's Adam Hall as he crossed into the end zone, then went down in pain. He was helped off the field with no weight on his left knee. The score was called back by an ineligible receiver downfield penalty.
Foles connected on touchdown passes of 45, 33 and 12 yards but Katz matched him all the way. The Oregon State coaching staff had held Katz down as he opened his first season as a starter but have unleashed him in the first two Pac-10 games. He threw for 260 yards in the Beavers' 31-28 victory over Arizona State a week ago.
The Beavers' Markus Wheaton caught seven for 113 yards. Katz, running toward the right sidelines, somehow threw 48-yard touchdown pass to Wheaton that put the Beavers up 17-7 with 9:21 left in the first half. Arizona's Juron Criner had 12 catches for a career-high 179 yards.
The Wildcats took the second-half kickoff and went 66 yards in just two minutes before Antolin scored on a 33-yard run. The point after attempt was blocked and it was 17-13.
Oregon State responded with an 11-play, 65-yard scoring drive that finished with Katz sneaking over from the 1. But Justin Kahut's extra point try was no good, giving the Beavers a 23-13 lead. He also missed the kick after the last Oregon State touchdown.
Nic Grigsby took a swing pass from Foles and weaved through traffic 41 yards for a touchdown that cut Oregon State's lead to 23-20 with 3:20 left in the third quarter. The Beavers responded with a 10-play, 80-yard drive, culminating with Jacquizz Rodgers' touchdown run.
Both quarterbacks had passes intercepted in the end zone. When Joseph Perkins picked off Katz's pass with 2:28 left in the half, it was Oregon State's first turnover of the season.