"I couldn't dunk it," Batum said. "I tried to dunk it, but I was too far out so I just had to push it, and the ball just turned around and in. I was scared to miss it."
Batum finished with 21 points for the Blazers, who won their sixth straight game at the Rose Garden, and their sixth in a row at home against the Spurs.
San Antonio led by as many as 10 in the fourth quarter but Portland pulled within one at 91-90 after a pair of free throws from Batum. Parker answered with a layup and Manu Ginobili made a 3-pointer to put San Antonio in front 96-90 with 1:21 left.
But the Spurs stumbled with turnovers and Andre Miller made two straight layups before Batum added a pair of free throws to tie it for Portland with 0.9 seconds left.
"It was just me and the rim," Batum said.
Miller called it the best pass he's ever made, and Brandon Roy was dazzled.
"The ball went right over my head and I looked over at Nic and he was right under the rim," said Roy, who was acting as a decoy on the play. "And I thought, 'Whoa! We can win!"'
Ginobili finished with 21 points and seven assists for the Western Conference-leading Spurs, who were coming off a 122-115 loss at Denver on Wednesday that opened a three-game road trip. The loss snapped a three-game winning streak.
Ginobili said a victory against the Blazers would have been sealed had the Spurs not had three turnovers in the final 40 seconds.
"It was ridiculous," he said. "One of the craziest games I've ever lost in the NBA."
Portland finished the game on a 20-8 run, including an 8-0 run over the final 1:12.
The Blazers were jockeying for playoff position at 1½ games in front of Denver for sixth place. Portland heads out on the road for the next three games -- against Oklahoma City, San Antonio and New Orleans.
"That was a big game. It was a really big game before we go back out there and play them again," said Miller, who had 21 points and eight assists. "You don't want to go out on a road trip losing a home game to a team that you're going to play again in a couple of days."
|More on Spurs at Blazers|
The Spurs were without Tim Duncan, who sprained his left ankle Monday night in a win over Golden State. He landed awkwardly after making a short jumper just 4 minutes in.
The two-time MVP, averaging 13 points and nine rebounds, did not travel on the road trip with the Spurs and there is no timetable for his return. The Spurs started Brazilian forward Tiago Splitter in Duncan's place.
The Spurs led by as many as 11 in the first quarter, but Portland narrowed it to 28-24 after Gerald Wallace's 3-pointer. Wallace hit another one to make it 28-27 at the start of the second.
Portland kept it close, but was unable to pull ahead until Miller's fast-break layup on a bounce pass from Wallace made it 47-46. The Spurs quickly reclaimed the lead on Matt Bonner's 3-pointer.
Both teams were streaky in the second half. Batum hit a 3-pointer midway through the third quarter that put Portland up 62-56. But the Spurs scored the next seven straight to pull back ahead 63-62.
The Blazers rallied again to go up 73-66 on LaMarcus Aldridge's dunk.
It appeared that Ginobili fouled Camby under San Antonio's basket, but it wasn't called and Ginobili hit a 3-pointer when Camby was appealing to officials to tie it at 75 with 10:25 to go. The Spurs went ahead on layups from Gary Neal, Bonner and George Hill to make it 81-75.
San Antonio extended the lead to 88-78 on Neal's running jumper.
"Tonight, we hung in there," Blazers coach Nate McMillan said. "We didn't panic late. We had to make stops and make plays. We didn't drop our heads, we continued to play."
- Spurs coach Gregg Popovich said he wouldn't change much because of Duncan's absence: "It's so late in the season, it's hard to change what you've been doing all year."
- It was just San Antonio's second two-game losing streak this season.
- Miller scored 13 of his 21 points in the second half.
- All five Portland starters were in double figures for the fifth time this season.